MessageFormat用来格式化一个消息,通常为一个字符串。如:
String str = "I'm not a {0}, age is {1,number,short}", height is {2,number,#.#};
可以将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 }:是从0开始的入参位置索引。 { ArgumentIndex , FormatType } { ArgumentIndex , FormatType , FormatStyle } FormatType: :指定使用不同的Format子类对入参进行格式化处理。值范围如下: number:调用NumberFormat进行格式化 date:调用DateFormat进行格式化 time:调用DateFormat进行格式化 choice:调用ChoiceFormat进行格式化 FormatStyle::设置FormatType中使用的格式化样式。值范围如下: 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);
最终结果是:ABCDEFGHIJKLMNOPQ
2、格式化字符串时,两个单引号才表示一个单引号,单个单引号会被省略,如:
String message = "oh, {0} is 'a' pig"; Object[] array = new Object[]{"ZhangSan"}; String value = MessageFormat.format(message, array);
最终结果是: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。
相关推荐
主要介绍了Java中的MessageFormat.format用法实例,本文先是讲解了MessageFormat的语法,然后给出了多个操作实例,需要的朋友可以参考下
java中MessageFormat格式化字符串的例子,包括NumberFormat,DateFormat,ChoiceFormat等
主要介绍了Java利用MessageFormat实现短信模板的匹配,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
前端项目-messageformat,multipleformat和selectformat message和i18n工具-一个实现ICU标准的javascript。
9.6.4 使用MessageFormat处理包含占位符的字符串 349 9.6.5 使用类文件代替资源文件 350 9.6.6 使用NumberFormat格式化数字 350 9.6.7 使用DateFormat格式化日期 352 9.7 本章小结 355 本章练习 355 第10章 ...
messageformat.net, .NET的ICU MessageFormat实现 用于. NET 的- 更好的用户界面字符串。 这是. NET 中ICU消息格式的实现。 有关该格式的官方信息,请转到: http://userguide.icu-project.org/formatparse/messages...
安装 > npm install messageformat-bundle用法 var messageformatBundle = require ( 'messageformat-bundle' ) ;// Work in progress…应用程序接口messageformatBundle(消息,[选项])消息类型: Object 必需的...
此monorepo由构成我们的ICU MessageFormat的JS实现的以下程序包组成: core-将MessageFormat字符串转换为JavaScript函数的核心库库的命令行客户端将其他本地化格式转换为MessageFormat 用于工具 loader-用于JSON,...
ngx-translate编译器,它使用messageformat.js来使用ICU语法编译翻译以处理复数形式和性别 (StackBlitz) 目录 安装 假设您已经安装了 。 使用npm : npm install ngx-translate-messageformat-compiler ...
官方版本,亲测可用
虽然有很多不同的 MessageFormat 方言,但我将坚持使用接受的语法。 ##特征 语法高亮 短绒: 突出显示无效的转义序列 突出显示无效的 MessageFormat 块 查找缺少“其他”形式的 MessageFormat 块 在 ...
利用MessageFormat格式化字符串实例资料.pdf
MessageFormat 库必须位于您的源代码树中的路径下,您将使用该路径作为别名,如下面的 RequireJS 配置示例所示。 RequireJS 配置 以下是您的 RequireJS 配置应如下所示: requirejs . config ( { "paths" : { ...
前端项目-angular-translate-interpolation-messageformat,使用messageformat.js根据某些值插入字符串。
前端项目-intl-messageformat,将ICU消息字符串格式化为数字、日期、复数,然后选择占位符以创建本地化消息。
用法 const { parsePo , parseMo } = require ( 'gettext-to-messageformat' ) const { headers , pluralFunction , translations } = parsePo ( ` # Examples from ...
Intl Messageformat Parser 是发送给 AST 的解析消息字符串,它可以格式化一个人的语言环境消息。
安装 npm install messageformat-compile-object --save用法 var compile = require('messageformat-compile-object');var obj = {locale: 'es'};obj.strings = { "foo": { "bar": "baz!" }};obj.plural = function ...
React消息格式安装$ npm install --save @oursky/react-messageformat$ yarn add @oursky/react-messageformat用法import * as React from "react" ;import * as ReactDOM from "react-dom" ;import { ...