标签: intl

如何让NumberFormatter以负号打印负货币值?

我正在使用PHP NumberFormatter类来打印货币值.

例如:

  $cFormatter = new NumberFormatter('en_US', NumberFormatter::CURRENCY);
  $cFormatter->formatCurrency(123, 'USD');
  $cFormatter->formatCurrency(123, 'BRL');
  $cFormatter->formatCurrency(123, 'GBP');
Run Code Online (Sandbox Code Playgroud)

这工作正常,并按预期分别返回"$123.00","R$123.00" "£123.00.

但负数字印在"会计风格"上,用括号括起来,而不是前导减去" - ".

例如:

$cFormatter->formatCurrency(-456, 'USD');
Run Code Online (Sandbox Code Playgroud)

返回"($456.00)",而我想要"-$456.00".当然有一种简单的方法可以做到这一点?

我可以通过覆盖前缀和后缀删除括号,如下所示:

$cFormatter->setTextAttribute(NumberFormatter::NEGATIVE_PREFIX, "-");
$cFormatter->setTextAttribute(NumberFormatter::NEGATIVE_SUFFIX, "");
Run Code Online (Sandbox Code Playgroud)

但后来我没有货币符号,例如"-456.00".

在设置NEGATIVE_PREFIX属性时,是否需要使用货币符号的转义码?

编辑:我很高兴设置一个不同的区域设置,如果这给了我正在寻找的结果.

编辑2:查看Intl库文档(这是用于实现NumberFormatter的库),以下看起来很有希望:

¤(\ u00A4):前缀或后缀:无货币符号,替换为货币符号.如果加倍,则用国际货币符号代替.如果是三倍,则替换为货币复数名称,例如美国的"美元"或"美元".如果存在于模式中,则使用货币小数分隔符而不是小数分隔符.

但是这个:

$cFormatter->setTextAttribute(NumberFormatter::NEGATIVE_PREFIX, "-¤");
Run Code Online (Sandbox Code Playgroud)

只需打印"-¤123",就没有喜悦.

编辑3:我想我找到了答案,见下文.

php currency numberformatter intl

7
推荐指数
1
解决办法
3588
查看次数

Flutter国际化-动态字符串

我正在使用intl包将我的应用翻译成西班牙语。

locales.dart

class AppLocale {
...
   String get folder => Intl.message("Folder", name: 'folder');
...
}
Run Code Online (Sandbox Code Playgroud)

messages_es.dart

class MessageLookup extends MessageLookupByLibrary {
      get localeName => 'es';

      final messages = _notInlinedMessages(_notInlinedMessages);
      static _notInlinedMessages(_) => <String, Function> {
            "folder": MessageLookupByLibrary.simpleMessage("Carpeta"),
      };
}
Run Code Online (Sandbox Code Playgroud)

我用以下代码称呼它:

AppLocale.of(context).folder
Run Code Online (Sandbox Code Playgroud)

一切正常。

但是,我需要创建“动态”字符串。例如:

“嗨,{$ name}”

然后,我将调用此字符串,并将此“名称”作为参数传递,或类似的内容。西班牙语将其翻译为“ Hola,{$ name}”。

是否可以使用此intl包?

internationalization intl flutter

7
推荐指数
2
解决办法
1189
查看次数

无法安装Windows 10上的Xampp Intl扩展

我尝试在Xampp上安装Megento 2(php 7.2.5)并通过安装过程我发现Intl扩展安装错误

在此输入图像描述

我做每一件事情;extension=intlextension=intl在php.ini

还我复制所有文件icu*.dll从文件xampp/phpxampp/php/extxampp/apache/pin目录,当然我重新启动Apache.

在此输入图像描述

还下载MSVCP110.dll并粘贴到C:\Windows\System32

还检查了系统变量中的PHP路径,这没关系.

但直到现在,Intl扩展从未发挥作用

任何帮助?

php xampp magento intl windows-10

7
推荐指数
2
解决办法
2476
查看次数

Mac OS:未加载国际扩展

  • macOS Mojave 10.14.3
  • PHP 7.1.23
  • Prestashop 1.7.5.1

为了使用Prestashop,我尝试在本地服务器上安装PHP intl扩展。

我添加extension=php_intl.soetc/php.ini

当我尝试安装Prestashop时,我得到了Intl extension is not loaded

$ php -m | grep国际

当我这样做时$ php -m | grep intl,我得到:

PHP Warning: PHP Startup: Unable to load dynamic library '/usr/local/lib/php/pecl/20160303/php_intl.so' - d lopen(/usr/local/lib/php/pecl/20160303/php_intl.so, 9): image not found in Unknown on line 0 Warning: PHP Startup: Unable to load dynamic library '/usr/local/lib/php/pecl/20160303/php_intl.so' - dlopen (/usr/local/lib/php/pecl/20160303/php_intl.so, 9): image not found in Unknown on line 0 intl

似乎该文件php_intl.so不存在。 …

php intl prestashop

7
推荐指数
2
解决办法
1732
查看次数

未找到类规范化器(在 PHP 5.3.8 中)

Normalizer我在尝试使用该类(特别是该函数)时收到此 PHP 错误Normalizer::normalize

Fatal error: Class 'Normalizer' not found.
Run Code Online (Sandbox Code Playgroud)

我目前使用的是 PHP 5.3.8,因此根据PHP 文档,它应该默认激活。我唯一能想到的是 PECL intl 扩展的问题。

我检查了php/ext/文件夹,它就php_intl.dll在那里。我检查了php.ini文件,没有extension=php_intl.dll命令,所以我添加了它。但仍然没有运气。除此之外我不知道。有人能告诉我这里到底发生了什么事吗?

谢谢

附加信息:当我运行时phpinfo,没有提及PECL intl 扩展,所以我猜测它没有正确安装。

是什么解决了我的问题:

http://www.tiv.net/2010/12/php-intl-extension-windows-apache.html,卸载 XAMPP 1.77(PECL intl 扩展存在某种内部错误)并安装 XAMPP 1.73。

php pecl intl

6
推荐指数
2
解决办法
1万
查看次数

反应国际格式日期

我的传入日期与此字符串完全相同:

myDate= ' 2017-05-05T12:24:06+0000'
Run Code Online (Sandbox Code Playgroud)

我正在使用“react-intl”中的 FormattedDate 来实现我想要的格式

12:24, 5 May 2017
Run Code Online (Sandbox Code Playgroud)

但是有了这个代码:

<FormattedDate
  value={myDate}
  day="numeric"
  month="long"
  year="numeric"
  hour="numeric"
  minute="numeric"/>
Run Code Online (Sandbox Code Playgroud)

我得到这个:

May 5, 2017, 12:24 
Run Code Online (Sandbox Code Playgroud)

我一定做错了什么。或者被误解的文档。你能给我建议吗?

一世

intl reactjs

6
推荐指数
1
解决办法
1万
查看次数

Docker容器中的PHP intl扩展

我正在尝试在Docker容器中加载国际PHP扩展,但似乎无法正常工作。

已经尝试过这个https://github.com/docker-library/php/issues/57,但是我仍然收到相同的错误消息:

configure: error: in `/usr/src/php/ext/intl':
configure: error: C++ preprocessor "/lib/cpp" fails sanity check
See `config.log' for more details
Run Code Online (Sandbox Code Playgroud)

我的Docker文件如下所示:

RUN apt-get -y update \
&& apt-get install -y libicu-dev\
&& docker-php-ext-configure intl \
&& docker-php-ext-install intl
Run Code Online (Sandbox Code Playgroud)

它是从php:fpm加载的

有没有人经历过这个问题并解决了这个问题?它让我发疯。

php php-extension intl docker

6
推荐指数
3
解决办法
6122
查看次数

Intl.NumberFormat 货币:$US 货币符号?

我不明白 NumberFormat 是如何工作的。

在法国,我们从不使用$US,为什么我会得到以下信息?

new Intl.NumberFormat("fr-FR",{
            style: 'currency',
            currency: 'USD',
            minimumFractionDigits: 2,
         }).format("345")
"345,00 $US"

new Intl.NumberFormat("fr-FR",{
            style: 'currency',
            currency: 'EUR',
            minimumFractionDigits: 2,
         }).format("345")
"345,00 €"
Run Code Online (Sandbox Code Playgroud)

另外:以下对我来说也没有任何意义。我尝试了随机语言环境来查看影响并为这两个获得不同的结果:

new Intl.NumberFormat("en-HOS",{
            style: 'currency',
            currency: 'USD',
            minimumFractionDigits: 2,
         }).format("345")
"345,00 $US"

new Intl.NumberFormat("en-HOSSDDG",{
            style: 'currency',
            currency: 'USD',
            minimumFractionDigits: 2,
         }).format("345")
"$345.00"
Run Code Online (Sandbox Code Playgroud)

这个 API 是坏的还是我错过了什么?

javascript currency number-formatting intl

6
推荐指数
2
解决办法
7108
查看次数

Flutter - 将分钟转换为 H:M

我正在寻找一种将分钟转换为小时和分钟的方法。我正在使用这个intl包,DateFormat但这需要两者hoursminutes所以它不会。

如果我有100分钟,我希望将其转换为01:40. 谢谢

datetime intl dart flutter

6
推荐指数
2
解决办法
4539
查看次数

React Native 中的 Intl.numberformat 在 ios 中运行时工作正常,但在 android 中则不行

我正在使用 React Native 开发一个在 IOS 和 Android 上运行的应用程序。我用来Intl.numberformat()打印货币,当应用程序在 IOS 上运行时运行顺利,但在 Android 上运行时出现此错误:ReferenceError: Can't find variable: Intl

如何让它在两个平台上运行?

android intl react-native

6
推荐指数
1
解决办法
5375
查看次数