Ionic 2, Using Angular 2 Pipe breaks on iOS—"Can't find variable: Intl" Ionic 2, Using Angular 2 Pipe breaks on iOS—"Can't find variable: Intl" ios ios

Ionic 2, Using Angular 2 Pipe breaks on iOS—"Can't find variable: Intl"


That's because it relies on the internalization API, which is not currently available in all browsers (for example not on iOS browser).

See the compatibility table.

This is a known issue (beta.1).

You can try to use a polyfill for Intl.

To do so, you can use the CDN version, and add this to your index.html:

<script src="https://cdn.polyfill.io/v2/polyfill.min.js?features=Intl.~locale.en"></script>

Or if you use Webpack, you can install the Intl module with NPM:

npm install --save intl

And add these imports to your app:

import 'intl';import 'intl/locale-data/jsonp/en';


There is a quick fix for this. Add

<script src="https://cdn.polyfill.io/v2/polyfill.min.js?features=Intl.~locale.en"></script>

to your index.html file before the <script src="cordova.js"></script> entry.

See this github answer https://github.com/angular/angular/issues/3333#issuecomment-203327903


Or another solution would be writing those pipes yourself. For the date, for example, you can use moment.js, or here is an example for the currency pipe:

import { Pipe, PipeTransform } from '@angular/core'@Pipe({ name: 'currency' })export class CurrencyPipe implements PipeTransform {    constructor() {}    transform(value: string, currencyString: string ) {         let stringOnlyDigits  = value.replace(/[^\d.-]/g, '');        let convertedNumber = Number(stringOnlyDigits).toFixed(2);        return convertedNumber + " " + currencyString;    }} 

This pipe is transforming the currency. The percent pipe would work nearly the same way. The regex is filtering all digits including the point for float numbers.