欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

如何修改google libphonenumber的meta data (号码归属地,紧急号码列表,号码格式,号码范围)

程序员文章站 2022-04-04 12:54:32
...

[DESCRIPTION]
如果需要修改google libphonenumber里的meta data (比如国家的local emergency number, number format, 号码归属地),可以根据以下SOP进行修改。

[SOLUTION]
修改步骤:

  1. 查看使用的版本信息,版本信息路径:external/libphonenumber/README.version
    Ex:
Version: 8.3.3
  1. 从github下载对应的libphonenumber版本,github路径:https://github.com/googlei18n/libphonenumber
    版本下载地址:https://github.com/googlei18n/libphonenumber/releases
  2. 修改对应的xml(不同的号码信息对应不同的xml)
    1). 修改号码格式, 号码范围,请修改PhoneNumberMetadata.xml: https://github.com/googlei18n/libphonenumber/blob/2eafc96bbc35230c55d8a7e93257360fcfec161f/resources/PhoneNumberMetadata.xml
    2). 修改当地紧急号码,请修改ShortNumberMetadata.xml: https://github.com/googlei18n/libphonenumber/blob/2eafc96bbc35230c55d8a7e93257360fcfec161f/resources/ShortNumberMetadata.xml
    3). 修改号码归属地,请修改: https://github.com/googlei18n/libphonenumber/tree/2eafc96bbc35230c55d8a7e93257360fcfec161f/resources/geocoding
  3. 根据google提供的方法重新build meta data
    How to make metadata changes
    https://github.com/googlei18n/libphonenumber/blob/master/making-metadata-changes.md
  4. 用新生成的data文件替换原有文件 (external/libphonenumber/libphonenumber/src/com/google/i18n/phonenumbers/data/)

[Example]
当地紧急号码示例(正则表达式)
local emergency number(ShortNumberMetadata.xml):

<!-- China -->
<!-- http://www.itu.int/oth/T020200002B/en -->
<territory id="CN">
...
<emergency>
<nationalNumberPattern>
1(?:
1[09]|
20
)
</nationalNumberPattern>
<possibleLengths national="3"/>
<exampleNumber>119</exampleNumber>
</emergency>
</territory>

号码格式实例(蓝字部分)
number format (PhoneNumberMetadata.xml):

<!-- China -->
<!-- The international/national prefix patterns must not collide with valid prefixes such
as 170, 176, 177 and 178. 179XX00 is a valid calling prefix, see: www.chahaoba.com/179 -->
<territory id="CN" countryCode="86" internationalPrefix="(1(?:[129]\d{3}|79\d{2}))?00"
preferredInternationalPrefix="00" nationalPrefix="0"
nationalPrefixForParsing="(1(?:[129]\d{3}|79\d{2}))|0">
...
<numberFormat pattern="(\d{3})(\d{4})(\d{4})" carrierCodeFormattingRule="$CC $FG">
<leadingDigits>1[3-578]</leadingDigits>
<format>$1 $2 $3</format>
</numberFormat>