秒懂 Android strings.xml

1,470 阅读2分钟

xliff字符串替换

  • 属性值
    • %n$ms (%s)
      • 代表输出的是字符串,n代表是第几个参数,设置m的值可以在输出之前放置空格
      • 注意:
        • m 设置为3只有1个空格,之后累加
    • %n$md (%d)
      • 代表输出的是整数,n代表是第几个参数,设置m的值可以在输出之前放置空格,也可以设为0m,在输出之前放置m个0
    • %n$mf (%f)
      • 代表输出的是浮点数,n代表是第几个参数,设置m的值可以控制小数位数,如m=2.2时,输出格式为00.00
  • 占位符
    • eg:

        <string name="str_xx_day">%1$3s天</string>
        mTxtXxDay.setText(String.format(getString(R.string.str_xx_day),10+""));
      
  • xliff:g</xliff:g>标签
    • 添加

        在strings.xml中置顶添加:
        <?xml version="1.0" encoding="utf-8"?>
        同时在<resources >节点中添加属性:
        xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"
      
    • eg:

        在strings.xml中:
        <string name="test_xliff">
        	<xliff:g id="year">%1d</xliff:g>年<xliff:g id="month">%2s</xliff:g>月
        </string>
        or
        <string name="test_xliff">
        	<xliff:g id="year">%d</xliff:g>年<xliff:g id="month">%s</xliff:g>月
        </string>
        or
        <string name="test_xliff">
        	<xliff:g id="year">%1$3d</xliff:g>年<xliff:g id="month">%2$s</xliff:g>月
        </string>
      
        在.class中:
        mTxtXxDay.setText(String.format(getResources().getString(R.string.test_xliff), 2017, "二"));
        or
        mTxtXxDay.setText(getResources().getString(R.string.test_xliff, 2017, "二");
      

字符串拼接

  • 自定义的key和values

      <!DOCTYPE resources [
          <!ENTITY year "2017">
      ]>
      <string name="str_year">&year;年</string>
      mTxtXxDay.setText(getResources().getString(R.string.str_year);
    

转意符

  • 空格

      &#160;
    
  • 换行

      \n
    
  • 省略号

      &#8230;
    
  • 解决特殊符号报错问题

    • 1、对特殊字符使用转义字符进行转义,添加转意符号 \

      • eg:

          转义前:
          <string >I don't know.</string>
          转义后:
          <string >I don\'t know.</string>
          <string >I don\&apos;t know.</string>
        
    • 2、增加一个属性:

      • eg:

          <string formatted="false"></string>
        
    • 3、用双引号将字符串全部圈住

      • eg:

          <string >"I don't know."</string>
        

将字符串添加到strings.xml

  • 整理
    • 在layout文件中,选中需整理到string.xml中的字符串,同时按住Alt+Enter,
    • 即可看到弹出选择的对话款,选择其中的“Extract string resource”
    • 在Java文件中同上
  • 新增
    • 在Java文件中,直接写上R.string.xxx,然后按Alt+Enter,
    • 即可看到弹出选择的对话款,选择其中的“Create string value resource 'xxx'”
  • 遗漏在代码中的字符串查找
    • 使用快捷键(Crtl+Shift+F)打开查找功能
      • 在Text to find中输入正则表达式(^((?!(*|//)).)+[\u4e00-\u9fa5])
      • 勾选Regular expression
      • 点击Find

国际化处理

  • 当前语言判断

    • 通过字符串直接判断本机使用语言

    • eg:

        <string name="language_abbr">EN</string>
        <string name="language_abbr">PL</string>
        switch(getString(R.string.language_abbr)){
        	case "EN":
        		break;
        	case "PL":
        		break;
        	default:
        		break;
        }
      
  • 国际化语言常用字符串

    • 时间:
      • 小时
        • h
        • hr
        • hrs
        • hour
      • 分钟
        • min
        • minute
        • s
        • sec
        • second
      • 上午
        • a.m.
        • morning
      • 下午
        • p.m.
        • afternoon
    • 星期:
      • 星期一
        • Mon.
        • Monday
      • 星期二
        • Tues.
        • Tuesday
      • 星期三
        • Wed.
        • Wednesday
      • 星期四
        • Thur.
        • Thurday
      • 星期五
        • Fri.
        • Friday
      • 星期六
        • Sat.
        • Saturday
      • 星期天
        • Sun.
        • Sunday
    • 月份:
      • 一月份
        • Jan.
        • January
      • 二月份
        • Feb.
        • February
      • 三月份
        • Mar.
        • March
      • 四月份
        • Apr.
        • April
      • 五月份
        • May
      • 六月份
        • Jun.
        • June
      • 七月份
        • Jul.
        • July
      • 八月份
        • Aug.
        • August
      • 九月份
        • Sept.
        • September
      • 十月份
        • Oct.
        • October
      • 十一月份
        • Nov.
        • November
      • 十二月份
        • Dec.
        • December