The DotNetLocaleSettings class provides locale-specific formatting settings including decimal separators, thousand separators, currency symbols, and date/time separators.
Use the current system locale:
import { DotNetLocaleSettings } from '@pbkware/dot-net-date-number-formatting';
const settings = DotNetLocaleSettings.current;
console.log(settings.name); // e.g., "en-US"
console.log(settings.decimalSeparator); // "."
console.log(settings.thousandSeparator); // ","
Use invariant culture (en-US style) for consistent formatting across systems:
const invariant = DotNetLocaleSettings.createInvariant();
console.log(invariant.name); // "en-US"
console.log(invariant.decimalSeparator); // "."
console.log(invariant.thousandSeparator); // ","
console.log(invariant.currencyString); // "$"
Create settings for a specific locale:
const french = DotNetLocaleSettings.create('fr-FR');
console.log(french.decimalSeparator); // ","
console.log(french.thousandSeparator); // " " (space)
console.log(french.currencyString); // "€"
const german = DotNetLocaleSettings.create('de-DE');
console.log(german.decimalSeparator); // ","
console.log(german.thousandSeparator); // "."
console.log(german.currencyString); // "€"
const british = DotNetLocaleSettings.create('en-GB');
console.log(british.decimalSeparator); // "."
console.log(british.thousandSeparator); // ","
console.log(british.currencyString); // "£"
name: The locale name (e.g., "en-US", "fr-FR")id: The locale identifier (same as name)decimalSeparator: Character used for decimal point (e.g., "." or ",")thousandSeparator: Character used for thousands grouping (e.g., "," or "." or " ")currencyString: Currency symbol (e.g., "$", "€", "£")dateSeparator: Character used between date components (e.g., "/", "-", ".")timeSeparator: Character used between time components (e.g., ":")defaultFloat: Pre-configured Intl.NumberFormat for floating-pointdefaultDecimal: Pre-configured Intl.NumberFormat for high-precision decimalsdefaultCurrency: Pre-configured Intl.NumberFormat for currencyimport { DotNetDateTimeFormatter, DotNetLocaleSettings } from '@pbkware/dot-net-date-number-formatting';
const formatter = new DotNetDateTimeFormatter();
const date = new Date(2024, 6, 5, 14, 30, 0);
// US format
formatter.localeSettings = DotNetLocaleSettings.create('en-US');
formatter.trySetFormat('d');
console.log(formatter.toString(date)); // "7/5/2024"
// European format
formatter.localeSettings = DotNetLocaleSettings.create('en-GB');
formatter.trySetFormat('d');
console.log(formatter.toString(date)); // "05/07/2024"
// German format
formatter.localeSettings = DotNetLocaleSettings.create('de-DE');
formatter.trySetFormat('d');
console.log(formatter.toString(date)); // "05.07.2024"
import { DotNetFloatFormatter, DotNetLocaleSettings } from '@pbkware/dot-net-date-number-formatting';
const formatter = new DotNetFloatFormatter();
const value = 1234.56;
// US format
formatter.localeSettings = DotNetLocaleSettings.create('en-US');
formatter.trySetFormat('N2');
console.log(formatter.toString(value)); // "1,234.56"
// French format
formatter.localeSettings = DotNetLocaleSettings.create('fr-FR');
formatter.trySetFormat('N2');
console.log(formatter.toString(value)); // "1 234,56"
// German format
formatter.localeSettings = DotNetLocaleSettings.create('de-DE');
formatter.trySetFormat('N2');
console.log(formatter.toString(value)); // "1.234,56"
const formatter = new DotNetFloatFormatter();
const value = 1234.56;
// US Dollar
formatter.localeSettings = DotNetLocaleSettings.create('en-US');
formatter.trySetFormat('C2');
console.log(formatter.toString(value)); // "$1,234.56"
// Euro (France)
formatter.localeSettings = DotNetLocaleSettings.create('fr-FR');
formatter.trySetFormat('C2');
console.log(formatter.toString(value)); // "1 234,56 €"
// British Pound
formatter.localeSettings = DotNetLocaleSettings.create('en-GB');
formatter.trySetFormat('C2');
console.log(formatter.toString(value)); // "£1,234.56"
const locale = DotNetLocaleSettings.create('en-US');
// Decimal: .
// Thousands: ,
// Currency: $
// Date: / (M/D/Y)
// Example number: 1,234.56
// Example currency: $1,234.56
// Example date: 7/5/2024
const locale = DotNetLocaleSettings.create('fr-FR');
// Decimal: ,
// Thousands: (space)
// Currency: €
// Date: /
// Example number: 1 234,56
// Example currency: 1 234,56 €
// Example date: 05/07/2024
const locale = DotNetLocaleSettings.create('de-DE');
// Decimal: ,
// Thousands: .
// Currency: €
// Date: .
// Example number: 1.234,56
// Example currency: 1.234,56 €
// Example date: 05.07.2024
const locale = DotNetLocaleSettings.create('en-GB');
// Decimal: .
// Thousands: ,
// Currency: £
// Date: /
// Example number: 1,234.56
// Example currency: £1,234.56
// Example date: 05/07/2024
const locale = DotNetLocaleSettings.create('ja-JP');
// Decimal: .
// Thousands: ,
// Currency: ¥
// Date: /
// Example number: 1,234.56
// Example currency: ¥1,235
// Example date: 2024/07/05
const locale = DotNetLocaleSettings.createInvariant();
// Convert number to string
locale.numberToStr(1234.56, { minimumFractionDigits: 2 });
// "1234.56"
// Parse number from string
const result = locale.tryStrToNumber('1,234.56');
if (result.isOk()) {
console.log(result.value); // 1234.56
}
// Parse integer
const intResult = locale.tryStrToInt('123');
if (intResult.isOk()) {
console.log(intResult.value); // 123
}
// Parse BigInt
const bigIntResult = locale.tryStrToBigInt('9007199254740991');
if (bigIntResult.isOk()) {
console.log(bigIntResult.value); // 9007199254740991n
}
locale.boolToStr(true); // "true"
locale.boolToStr(false); // "false"
const boolResult = locale.tryStrToBool('yes');
if (boolResult.isOk()) {
console.log(boolResult.value); // true
}
// Accepts: "true", "1", "yes" → true
// Accepts: "false", "0", "no" → false
const date = new Date(2024, 6, 5);
// Format date
locale.dateToStr(date, { dateStyle: 'short' });
// "7/5/2024"
// Parse date
const dateResult = locale.tryStrToDate('2024-07-05');
if (dateResult.isOk()) {
console.log(dateResult.value); // Date object
}
// Locale-aware uppercase conversion
const char = locale.toUpperChar('i');
// US locale: "I"
// Turkish locale (tr-TR): "İ"
When storing formatted values or when consistency across systems is important:
const formatter = new DotNetFloatFormatter();
formatter.localeSettings = DotNetLocaleSettings.createInvariant();
formatter.trySetFormat('N2');
// Always formats the same way regardless of system locale
const stored = formatter.toString(1234.56); // "1,234.56"
When displaying values to users:
const formatter = new DotNetFloatFormatter();
formatter.localeSettings = DotNetLocaleSettings.current; // User's locale
formatter.trySetFormat('C2');
// Formats according to user's locale preferences
const displayed = formatter.toString(1234.56);
Create locale settings once and reuse:
const locale = DotNetLocaleSettings.createInvariant();
const dateFormatter = new DotNetDateTimeFormatter();
dateFormatter.localeSettings = locale;
const numberFormatter = new DotNetFloatFormatter();
numberFormatter.localeSettings = locale;
// Both formatters use the same locale settings