使用ICU-message格式 - YYYY-MM-DDThh:mm:ss
,是否有一种强大且无拐杖的方式在ISO-8601字符串中打印formatMessageFunction
?
子问题1 :是否支持其他自定义格式字符串?
Subquestion 2 :为什么Intl.DateTimeFormat不支持自定义格式?
我想将ICU-messages用于javascript应用程序的i18n功能。 NPM上至少有两个包,允许格式化消息字符串:
每个都有某种var icu_string = `Hello,
<strong>{username}</strong>,
it is
<time datetime="{ts, date, ???}">{ts, date}</time>
`;
,接受原始ICU消息,区域设置名称和应用数据。但两者都使用Intl.DateTimeFormat(看起来像是行业标准):
并且无法使用自定义格式设置日期格式。
尽管所述实施方案存在上述限制,但ICU describes a way of custom formatting for dates
我的ICU字符串:
var IntlMessageFormat = require('intl-messageformat'); // no matter, which NPM package to use
var formatter = new IntlMessageFormat(icu_string, 'en');
var output = formatter.format({
username: 'Barack Obama',
ts: new Date()
});
console.log(output);
示例代码:
Hello, <strong>Barack Obama</strong>, it is
<time datetime="2016-10-25T01:01:15Z">Oct 25, 2016</time>
理想的输出是locale
您可以在此处测试当前行为:format-message.github.io
$a = true;
$b = false;
$c = true;
$d = false;
$e = false;
$booleanVariables = [
$a,
$b,
$c,
$d,
$e
];
$count = 0;
foreach ($booleanVariables as $variable) {
if ($variable) {
$count++;
// Do something here
}
}
echo $count;
参数(代码将使用所选的语言环境进行翻译)。答案 0 :(得分:1)
一个简单的解决方法是传入预格式化的时间戳。至少对于ISO时间戳,您可以将date.toISOString()
作为单独的参数传递给消息。
var IntlMessageFormat = require('intl-messageformat'); // no matter, which NPM package to use
var icu_string = 'Hello, {username}, it is {ts, date} (ISO-timestamp is {tsiso})'
var formatter = new IntlMessageFormat(icu_string, 'en');
var date = new Date();
var output = formatter.format({
username: 'Barack Obama',
ts: date,
tsiso: date.toISOString()
});
console.log(output);
intl-messageformat和format-message都可以根据Intl.DateTimeFormat选项定义自定义格式,而不是ICU的SimpleDateFormat。
答案 1 :(得分:0)
看看闭包,goog.i18n.DateTimeFormat: https://google.github.io/closure-library/api/goog.i18n.DateTimeFormat.html
它使用ICU模式的一个子集(在上面的链接点击&#34;查看源&#34;,并查看第33行的文档)
警告:使用您自己的模式意味着您应该对#14;正确的事情负责,因为您丢弃了图书馆所知道的东西&#34;关于正确的区域设置格式。
你想要实现的目标是什么东西不支持?