使用 Phrase 格式化 Android 字符串
来源:互联网 发布:淘宝众筹玩法 编辑:程序博客网 时间:2024/04/30 11:44
转自http://blog.chengyunfeng.com/?p=579
Phrase 是一个用来替代 Android 中字符串格式化功能的小型类库。解决了在实际开发中遇到的几个问题。这些问题如下:
假如有这么一个 字符串定义:
<string name="greeting"> Hello %1$s, today\'s cook yielded %2$d %3$s.</string>
使用 Resources 的 getString(…) 函数可以很方便的格式化其内容:
String name = "Walter";int yield = 50;String unit = "pounds";String greeting = context.getString(R.string.greeting, name, yield, unit);
但是这里的 %1$s 和 %2$d 是非常程序话的,不查看文本内容根本无法知道其代表的含义,另外 ,多个参数的顺序也非常重要,如果搞错了,显示的内容就错了。
另外 getString(…) 函数还无法处理 HTML 格式化标签。例如 文字加粗、斜体等。 该函数会把这些基本标签给过滤掉。
Phrase
Phrase 使用 命名参数的解决方式,例如:
<string name="greeting"> Hello {name}, today\'s cook yielded {yield} {unit}.</string>
为了减少翻译这些字符串出错的可能性,所以规则制定的比较粗暴:
- 使用大括号来环绕一个参数,文本中的大括号需要使用两个大括号来表示
- 参数的名字需要依靠小写字母开始,后面只能跟小写字母和下划线
然后使用如下方式来格式化该字符串:
// 这里 put(...) 函数的调用顺序是无关紧要的CharSequence greeting = Phrase.from(context, R.string.greeting) .put("unit", unit) .put("name", name) .put("yield", yield) .format();
注意, Phrase 返回的是一个 CharSequence 而不是 String, 这样可以支持基本的格式化字符串。例如:
<string name="did_you_learn"> <!-- class_type is something like Chemistry. --> Did you learn <b>nothing</b> from my {class_type} class?</string>
另外,为了避免文本显示错误,当遇到如下问题的时候, Phrase 就即刻抛出错误:
- 命名参数不规范或者缺少配对的大括号
put(...)
函数参数不能为 nullput(...)
的 key 在格式化字符串中不存在- 调用
format()
的时候还有 参数 没赋值的情况
paraphrase
paraphrase 虽然使用 Phrase 来格式化字符串,减少了翻译字符和格式化字符串出错的可能性,但是使用起来还是有点麻烦,而 paraphrase 这个 Gradle 插件使 Phrase 的使用更加方便。
例如:
<string name="greeting">Hello, {other_name}! My name is {my_name}.</string>使用 Gradle 编译后可以这样用 Phrase:
CharSequence greeting = Phrase.greeting() .other_name("GitHub user") .my_name("Jake Wharton") .build(this);
如果你在翻译的时候,错误的修改了字符串:
<string name="greeting">Hello! My name is {my_name}.</string>
Example.java:34: error: cannot find symbol .other_name("GitHub user") ^ symbol: method other_name(String) location: class Phrase_greeting
现在编译项目的时候就会报错,而不是在运行应用的时候 Crash。
在项目中的 build.gradle 配置文件中添加如下内容来使用 paraphrase
:
buildscript { repositories { mavenCentral() maven url: 'http://oss.sonatype.org/content/repositories/snapshots/' } dependencies { classpath 'com.android.tools.build:gradle:0.8.+' classpath 'com.jakewharton.paraphrase:paraphrase:1.0.0-SNAPSHOT' }}apply plugin: 'android'apply plugin: 'paraphrase'
Read more: http://blog.chengyunfeng.com/?p=579#ixzz2z6izBfJJ
- 使用 Phrase 格式化 Android 字符串
- Android字符串格式化开源库phrase介绍
- phrase
- phrase
- phrase
- Phrase
- android中的格式化字符串
- Android字符串格式化
- Android字符串格式化
- Android字符串格式化输出
- Android 格式化字符串资源
- android中的格式化字符串
- Android中格式化字符串
- Android格式化字符串
- Android字符串格式化
- Android中格式化字符串
- java & android格式化字符串
- Android字符串格式化
- getaddrinfo()函数详解
- PB-Powerbuilder
- 拐坑删塘赖级滩敌
- Android中自定义View的MeasureSpec使用
- 书摘笔记
- 使用 Phrase 格式化 Android 字符串
- Hbase入门6 -白话MySQL(RDBMS)与HBase之间
- 孤鸿寡鹄费和风格和发
- Enable CGI on your Apache server(ubuntu+apache2)实践可行
- Levenshtein distance
- 欧拉函数与容斥
- 仿火车出票效果
- SQL SERVER数据类型与C#数据类型对照表
- 使用EditPlus搭建Lua开发环境