- 浏览: 229743 次
- 性别:
- 来自: 武汉
文章分类
最新评论
-
zxjlwt:
学习了。http://surenpi.com
在Eclipse中搭建Apache Felix环境 -
李嘉铭:
你知道 Component可以当注解使用吗?像这样@Compo ...
Declarative Services中的服务引用 -
pengshuangbao520:
MessageFormat用法 -
jongsuny:
http://kimnote.com/2013/08/java ...
区分运行时异常和受检查异常【文摘+转】 -
jongsuny:
http://kimnote.com/2013/08/java ...
区分运行时异常和受检查异常【文摘+转】
MessageFormat用来格式化一个消息,通常是一个字符串,比如:
String str = "I'm not a {0}, age is {1,number,short}", height is {2,number,#.#};
而MessageFormat可以格式化这样的消息,然后将格式化后的字符串插入到模式中的适当位置,比如:
将str中的{0}用"pig"替换,{1,number,short}用数字8替换,{2,number,#.#}用数字1.2替换。
那么最终用户得到的是一个格式化好的字符串"I'm not a pig, age is 8, height is 1.2"。
MessageFormat本身与语言环境无关,而与用户提供给MessageFormat的模式和用于已插入参数的子格式模式有关,以生成适用于不同语言环境的消息。
MessageFormat模式(主要部分):
FormatElement:
{ ArgumentIndex }
{ ArgumentIndex , FormatType }
{ ArgumentIndex , FormatType , FormatStyle }
FormatType:
number
date
time
choice(需要使用ChoiceFormat)
FormatStyle:
short
medium
long
full
integer
currency
percent
SubformatPattern(子模式)
还以str为例,在这个字符串中:
1、{0}和{1,number,short}和{2,number,#.#};都属于FormatElement,0,1,2是ArgumentIndex。
2、{1,number,short}里面的number属于FormatType,short则属于FormatStyle。
3、{1,number,#.#}里面的#.#就属于子格式模式。
指定FormatType和FormatStyle是为了生成日期格式的值、不同精度的数字、百分比类型等等。
实例:
1、ArgumentIndex必须是非负整数,它的个数不只限于0到9这10个,它可以用0到9的数字组成,因此可以有好多个,如:
String pig = "{0}{1}{2}{3}{4}{5}{6}{7}{8}{9}{10}{11}{12}{13}{14}{15}{16}"; Object[] array = new Object[]{"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q"}; String value = MessageFormat.format(message, array); System.out.println(value);
最终结果是:ABCDEFGHIJKLMNOPQ
2、格式化字符串时,两个单引号才表示一个单引号,单个单引号会被省略,如:
String message = "oh, {0} is 'a' pig"; Object[] array = new Object[]{"ZhangSan"}; String value = MessageFormat.format(message, array); System.out.println(value);
最终结果是:oh, ZhangSan is a pig
给字母a加上单引号,如:
String message = "oh, {0} is ''a'' pig"; Object[] array = new Object[]{"ZhangSan"}; String value = MessageFormat.format(message, array); System.out.println(value);
最终结果是:oh, ZhangSan is 'a' pig
3、单引号会使某个字符或串保持原形。
所以,假如没有特殊要求,一般都是要在正式格式化之前把单引号都去掉,否则会造成不必要的麻烦,如:
String message = "oh, '{0}' is a pig"; Object[] array = new Object[]{"ZhangSan"}; String value = MessageFormat.format(message, array); System.out.println(value);
最终结果是:oh, {0} is 'a' pig,此处ZhangSan无法显示。
又如,使用子格式模式,多了一个单引号:
String message = "oh, '{0,number,#.#} is a pig"; Object[] array = new Object[]{new Double(3.1415)}; String value = MessageFormat.format(message, array); System.out.println(value);
最终结果是:oh, {0,number,#.#} is 'a' pig。
如果像下面这样,就可以正确显示:
String message = "oh, {0,number,#.#} is a pig"; Object[] array = new Object[]{new Double(3.1415)}; String value = MessageFormat.format(message, array); System.out.println(value);
最终结果是:oh, 3.1 is a pig
3、无论是有引号字符串还是无引号字符串,左花括号都是不支持的,但支持右花括号显示,如:
String message = "oh, { is a pig"; Object[] array = new Object[]{"ZhangSan"}; String value = MessageFormat.format(message, array); System.out.println(value);
最终结果是:异常java.lang.IllegalArgumentException: Unmatched braces in the pattern
右花括号可以显示,如:
String message = "oh, } is a pig"; Object[] array = new Object[]{"ZhangSan"}; String value = MessageFormat.format(message, array); System.out.println(value);
最终结果是:oh, } is a pig
关于MessageFormat.format方法:
每调用一次MessageFormat.format方法,都会新创建MessageFormat的一个实例,相当于MessageFormat只使用了一次。MessageFormat类的format方法如下:
public static String format(String pattern, Object ... arguments) { MessageFormat temp = new MessageFormat(pattern); return temp.format(arguments); }
如果要重复使用某个MessageFormat实例,可以用如下方式:
String message = "oh, {0} is a pig"; MessageFormat messageFormat = new MessageFormat(message); Object[] array = new Object[]{"ZhangSan"}; String value = messageFormat.format(array); System.out.println(value);
最终结果是:oh, ZhangSan is a pig
发表评论
-
java List 排序
2013-07-31 16:20 0import java.util.ArrayList; i ... -
java.net.MalformedURLException: unknown protocol: e
2013-07-23 19:01 3247java.net.MalformedURLExcept ... -
获取年月日时分秒
2013-07-10 13:44 916Calendar c = Calendar.getInst ... -
SimpleDateFormat精确到毫秒
2013-07-09 10:27 8438SimpleDateFormat dfs = new Sim ... -
java验证字符串是否是数字
2013-07-04 10:48 5693import java.util.regex.Matcher ... -
区分运行时异常和受检查异常【文摘+转】
2011-11-13 22:07 9039正确运用异常处理机制 ... -
java动态代理
2011-11-06 19:56 0在程序运行时,可以为某个类指定一个代理,然后代理调用相应的处理 ... -
深入理解java虚拟机
2011-11-02 22:08 0深入理解java虚拟机 -
使用JDBC API作为持久化层的优缺点
2011-10-25 21:59 0在Java领域,访问关系数据库的最原始、最直接的方法是借助JD ... -
关于继承(一)
2011-10-23 21:17 881public class A { public A() ... -
类加载器
2011-10-17 10:33 0java是具有动态性,什么是动态性?有个最直观的例子:wind ... -
System.arraycopy()实现数组复制
2011-10-15 17:56 2147System.arraycopy(Object src, in ... -
Integer.parseInt
2011-10-12 14:41 0Integer.parseInt("8F" ... -
换行符和制表符
2013-03-06 14:43 2061\n: 换行符。结束光标当前所在行,光标进入下一行。\t: ... -
Loading file from URL
2011-10-25 21:40 1733import java.io.BufferedReade ... -
Access restrictions on Jars
2011-10-11 17:24 0Access restrictions on Jars -
Quartz
2011-09-21 17:58 0Quartz -
ghdf
2011-09-21 15:12 01.Id generator(native,assigned, ... -
static关键字解析
2011-09-15 17:04 0static方法只能访问static变量。 static b ... -
BigDecimal
2011-09-13 15:14 0BigDecimal
相关推荐
下面我们将详细探讨`MessageFormat`的使用方法和特性。 1. **模式和参数** `MessageFormat`使用特定的模式语法来定义字符串格式,其中`{}`用于标识参数位置。例如,模式`"{0} {1}"`表示两个参数,分别在输出中占据...
在前端开发中,国际化(i18n)是不可或缺的一部分,它使得软件能够根据用户的语言和地区提供相应的本地化...通过深入理解和使用messageformat.zip中的资源,开发者可以更好地掌握国际化在JavaScript项目中的实践方法。
`MessageFormat.format`方法的灵活性还体现在它可以处理复杂的格式化需求,例如使用`ChoiceFormat`来根据参数值的不同输出不同的消息。通过这种方式,我们可以构建出适应各种场景的国际化和本地化消息,使得代码更...
关于压缩包内的文件`JAVA学习(十)__MessageFormat用法 - CSDN博客.html`和`JAVA学习(十)__MessageFormat用法 - CSDN博客_files`,它们可能是一个CSDN博客文章的网页源代码和相关资源。这篇文章可能更深入地探讨了`...
3. **格式化消息**:使用`format`方法,传入一个包含替换占位符的对象,即可生成本地化的字符串。例如: ```javascript const formattedMessage = message.format({ count: 5 }); // 结果:'你有5条未读消息' ``...
这里的`{count, plural, ...}`就是MessageFormat的用法,可以根据`count`的值动态生成不同的翻译。 4. 在模板中使用`$translate`服务或指令(如`translate`)来调用翻译: ```html $translate('GREETING', {name...
安装 > npm install messageformat-bundle用法 var messageformatBundle = require ( 'messageformat-bundle' ) ;// Work in progress…应用程序接口messageformatBundle(消息,[选项])消息类型: Object 必需的...
在这种情况下,我们创建了一个`MessageFormat`对象,然后使用`format`方法和不同的参数值(fileCount和diskName)来生成不同的输出。这种方式特别适合于需要重复格式化的情况,因为不必每次都创建新的`MessageFormat...
ngx-translate编译器,它使用messageformat.js来使用ICU语法编译翻译以处理复数形式和性别 (StackBlitz) 目录 安装 假设您已经安装了 。 使用npm : npm install ngx-translate-messageformat-compiler ...
在上面的代码中,我们首先定义了一个短信模板字符串,然后使用MessageFormat的format方法将其格式化成实际内容。我们可以看到,在短信模板字符串中,我们使用了多个占位符,如{0}、{1}等,这些占位符将被实际值所...
React消息格式安装$ npm install --save @oursky/react-messageformat$ yarn add @oursky/react-messageformat用法import * as React from "react" ;import * as ReactDOM from "react-dom" ;import { ...
在国际化应用中,消息通常需要根据不同的地区显示不同的语言,因此MessageFormat与ResourceBundle结合使用可以非常方便地实现这一点。消息格式字符串中通过占位符来标识动态内容的位置,例如"Welcome, {0}!"中的{0}...
用法 const { parsePo , parseMo } = require ( 'gettext-to-messageformat' ) const { headers , pluralFunction , translations } = parsePo ( ` # Examples from ...
安装 npm install messageformat-compile-object --save用法 var compile = require('messageformat-compile-object');var obj = {locale: 'es'};obj.strings = { "foo": { "bar": "baz!" }};obj.plural = function ...
适用于Webpack的YAML i18n加载程序...安装npm install messageformat-yaml-loader 或者yarn add messageformat-yaml-loader用法有关以下内容的有效演示, npm install在目录中运行npm install ,然后在浏览器中打开e
消息格式这个包的目的是将消息预编译为优化的翻译函数,具有完整的消息格式支持。命令行界面CLI messageformat (可... 用法: messageformat [options] < messages.json 或者cat messages.json | messageformat
在使用MyBatis进行批量数据插入时,可能会遇到MapperProvider结合MessageFormat拼接SQL语句执行时出现错误的问题。本文将深入分析这种报错的原因,并提供相应的解决策略。 首先,让我们看看问题的根源。在给出的...
使用MessageFormat.NET时,首先需要安装相关的NuGet包,然后可以创建`MessageFormatter`实例,加载模板字符串,并调用`Format`方法进行格式化。以下是一个简单的示例: ```csharp using MessageFormat.NET; var ...
解决Spring国际化文案占位符失效问题的方法是了解MessageFormat的解析机制,了解Spring的国际化文案占位符机制,并正确地使用MessageSource来获取国际化文案。 此外,还有一些其他的解决方法,例如使用Spring的国际...
该项目旨在为ICU MessageFormat提供统一的Clojure((Script))接口。 该库包装使用Clojure的,当使用ClojuresScript时。 使用ClojureScript时,该库支持消息格式字符串的运行时编译和预编译。 预编译可节省约50kB...