【问题标题】:Zend: get locale from countrycodeZend:从国家代码获取语言环境
【发布时间】:2014-06-17 18:40:48
【问题描述】:

我有一个国家/地区列表(即'de' => 'Deutschland''at' => 'Austria')。
我现在需要的是从国家代码中获取语言环境字符串('de_DE''de_AT')。

我需要这个来验证所选国家/地区的邮政编码。为此,邮政编码验证器需要一个带区域的语言环境字符串('de_AT''en_US')。 'de''en' 不起作用。

有什么简单的方法吗?

【问题讨论】:

    标签: php validation zend-framework zip country-codes


    【解决方案1】:

    另一种解决方案:

    $contry = 'at';
    $locale = Zend_Locale::getLocaleToTerritory($contry);
    $validator = new Zend_Validate_PostCode($locale);
    

    Zend_Locale::getLocaleToTerritory() 默认检索正确的语言环境。 (比如 'US' 给 'en_US')

    【讨论】:

      【解决方案2】:

      假设 $contry 是 'de' 或 'at'。
      我猜语言是德语('de')
      所以你可以像这样获得语言环境:

      $locale = new Zend_Locale('de_' . strtoupper($contry));
      

      您可以使用这样的验证器:

      $validator = new Zend_Validate_PostCode('de_' . strtoupper($contry));
      

      $validator = new Zend_Validate_PostCode($locale);
      

      编辑1
      与您的评论:

      如果您只有区域,则无法获取语言环境。
      例如,如果区域是'et',则您无法知道区域设置是'aa_ET' 还是'am_ET'
      所以我认为更好的解决方案是修改您的列表以在 POST 中获得良好的价值。
      例如,将'en_ZW' 替换为'zw'


      编辑2

      验证后,如果你只是想要验证器Zend_Validate_PostCode,有办法。

      确实,每个本地的xx_XX表示语言和地区,对于同一地区的所有语言,都有相同格式的邮政编码。
      以下是您将恢复验证器的代码:

      $contry = 'at';
      $list_locale =  Zend_Locale::getLocaleList();
      $contry_caps = strtoupper($contry);
      
      foreach($list_locale as $locale_str => $bool){
          $locale_obj = new Zend_Locale($locale_str);
          if ($contry_caps == $locale_obj->getRegion()){
              $locale = $locale_str;
              break;
          }            
      }
      
      $validator = new Zend_Validate_PostCode($locale);
      

      但是,请注意,有些地区没有在 Zend 中定义邮政编码(我使用的版本是 1.12.6)。
      以下是没有邮政编码验证器的地区:

      001
      AE
      EH
      LY
      PS
      QA
      YE
      BT
      150
      AG
      BS
      BZ
      DM
      FJ
      GD
      GI
      GM
      GY
      JM
      KI
      KN
      KY
      LC
      MW
      SB
      SL
      SS
      TT
      UM
      VC
      VG
      WS
      419
      BO
      CO
      CU
      EA
      IC
      PA
      PE
      SV
      IR
      BF
      BJ
      BL
      CI
      GA
      MF
      KP
      MM
      AW
      CW
      SR
      SX
      ST
      TL
      AL
      VN
      

      【讨论】:

      • 这来自 post,值为 'de' 或 'at' 或列表中的任何内容。该列表以阿富汗 (af) 开头,以津巴布韦 (zw) 结尾
      • 抱歉,不,这不是我的问题的解决方案。但是您的列表可能会帮助我创建映射列表。所以感谢你的努力:-)
      【解决方案3】:

      试试这个:

      $locale = new Zend_Locale('de');
      var_dump($locale->toString());
      

      这是文档: http://framework.zend.com/manual/1.0/en/zend.locale.functions.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-06-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-24
        • 1970-01-01
        相关资源
        最近更新 更多