senselogic-lingo
Version:
Text localization and processing.
366 lines (285 loc) • 16.6 kB
JavaScript
// -- IMPORTS
import
{
defineColorTag,
defineDualTag,
defineLineTag,
defineTag,
getBrowserLanguageCode,
getTranslatedCountryName,
getTranslatedCurrencyName,
getTranslatedDate,
getTranslatedNumber,
getTranslatedLanguageName,
getTranslatedTime,
getLocalizedText,
getProcessedMultilineText,
getProcessedText,
setDefaultLanguageCode,
setCountryCode,
setLanguageCode,
setLanguageSeparator
}
from "./index.js";
// -- FUNCTIONS
function checkResult(
value,
expectedValue
)
{
console.log( "Value :", JSON.stringify( value ) );
console.log( "Expected value :", JSON.stringify( expectedValue ) );
if ( value !== expectedValue )
{
throw new Error( "Invalid value : " + JSON.stringify( value ) );
}
}
// ~~
function runTests(
)
{
console.log( "Testing : getTranslatedNumber" );
setLanguageCode( "en" );
checkResult( getTranslatedNumber( 12 ), "12" );
checkResult( getTranslatedNumber( 12, { minimumIntegerDigitCount: 3 } ), "012" );
checkResult( getTranslatedNumber( 12, { minimumFractionalDigitCount: 3 } ), "12.000" );
checkResult( getTranslatedNumber( 12.89 ), "12.89" );
checkResult( getTranslatedNumber( 12.89, { minimumFractionalDigitCount: 3 } ), "12.890" );
checkResult( getTranslatedNumber( 12.89, { maximumFractionalDigitCount: 0 } ), "13" );
checkResult( getTranslatedNumber( 1234567.89 ), "1234567.89" );
checkResult( getTranslatedNumber( 1234567.89, { usesGrouping: true } ), "1,234,567.89" );
checkResult( getTranslatedNumber( 1234567.89, { minimumFractionalDigitCount: 3 } ), "1234567.890" );
checkResult( getTranslatedNumber( 1234567.89, { usesGrouping: true, minimumFractionalDigitCount: 3 } ), "1,234,567.890" );
checkResult( getTranslatedNumber( 1234567.89, { currency: "USD" } ), "$1234567.89" );
checkResult( getTranslatedNumber( 1234567.89, { currency: "USD", usesGrouping: true } ), "$1,234,567.89" );
checkResult( getTranslatedNumber( 1234567.89, { currency: "USD", usesGrouping: true, minimumFractionalDigitCount: 3 } ), "$1,234,567.890" );
setLanguageCode( "fr" );
checkResult( getTranslatedNumber( 12 ), "12" );
checkResult( getTranslatedNumber( 12, { minimumIntegerDigitCount: 3 } ), "012" );
checkResult( getTranslatedNumber( 12, { minimumFractionalDigitCount: 3 } ), "12,000" );
checkResult( getTranslatedNumber( 12.89 ), "12,89" );
checkResult( getTranslatedNumber( 12.89, { minimumFractionalDigitCount: 3 } ), "12,890" );
checkResult( getTranslatedNumber( 12.89, { maximumFractionalDigitCount: 0 } ), "13" );
checkResult( getTranslatedNumber( 1234567.89 ), "1234567,89" );
checkResult( getTranslatedNumber( 1234567.89, { usesGrouping: true } ), "1 234 567,89" );
checkResult( getTranslatedNumber( 1234567.89, { minimumFractionalDigitCount: 3 } ), "1234567,890" );
checkResult( getTranslatedNumber( 1234567.89, { usesGrouping: true, minimumFractionalDigitCount: 3 } ), "1 234 567,890" );
checkResult( getTranslatedNumber( 1234567.89, { currency: "EUR" } ), "1234567,89 €" );
checkResult( getTranslatedNumber( 1234567.89, { currency: "EUR", usesGrouping: true } ), "1 234 567,89 €" );
checkResult( getTranslatedNumber( 1234567.89, { currency: "EUR", usesGrouping: true, minimumFractionalDigitCount: 3 } ), "1 234 567,890 €" );
setLanguageCode( "pt" );
checkResult( getTranslatedNumber( 12 ), "12" );
checkResult( getTranslatedNumber( 12, { minimumIntegerDigitCount: 3 } ), "012" );
checkResult( getTranslatedNumber( 12, { minimumFractionalDigitCount: 3 } ), "12,000" );
checkResult( getTranslatedNumber( 12.89 ), "12,89" );
checkResult( getTranslatedNumber( 12.89, { minimumFractionalDigitCount: 3 } ), "12,890" );
checkResult( getTranslatedNumber( 12.89, { maximumFractionalDigitCount: 0 } ), "13" );
checkResult( getTranslatedNumber( 1234567.89 ), "1234567,89" );
checkResult( getTranslatedNumber( 1234567.89, { usesGrouping: true } ), "1.234.567,89" );
checkResult( getTranslatedNumber( 1234567.89, { minimumFractionalDigitCount: 3 } ), "1234567,890" );
checkResult( getTranslatedNumber( 1234567.89, { usesGrouping: true, minimumFractionalDigitCount: 3 } ), "1.234.567,890" );
checkResult( getTranslatedNumber( 1234567.89, { currency: "BRL" } ), "R\$ 1234567,89" );
checkResult( getTranslatedNumber( 1234567.89, { currency: "BRL", usesGrouping: true } ), "R\$ 1.234.567,89" );
checkResult( getTranslatedNumber( 1234567.89, { currency: "BRL", usesGrouping: true, minimumFractionalDigitCount: 3 } ), "R\$ 1.234.567,890" );
console.log( "Testing : getTranslatedDate" );
let date = new Date( "2024-08-02" );
setLanguageCode( "en" );
checkResult( getTranslatedDate( date ), "8/2/2024" );
checkResult( getTranslatedDate( date, { timeZone: "UTC" } ), "8/2/2024" );
checkResult( getTranslatedDate( date, { yearPattern: "y", monthPattern: "MM", dayPattern: "dd" } ), "08/02/2024" );
checkResult( getTranslatedDate( date, { yearPattern: "y", monthPattern: "MM", dayPattern: "dd", timeZone: "UTC" } ), "08/02/2024" );
setLanguageCode( "fr" );
checkResult( getTranslatedDate( date ), "02/08/2024" );
checkResult( getTranslatedDate( date, { timeZone: "UTC" } ), "02/08/2024" );
checkResult( getTranslatedDate( date, { yearPattern: "y", monthPattern: "MM", dayPattern: "dd" } ), "02/08/2024" );
checkResult( getTranslatedDate( date, { yearPattern: "y", monthPattern: "MM", dayPattern: "dd", timeZone: "UTC" } ), "02/08/2024" );
console.log( "Testing : getTranslatedTime" );
let time = new Date( "2024-08-02T07:05:00Z" );
setLanguageCode( "en" );
checkResult( getTranslatedTime( time ), "07:05:00" );
checkResult( getTranslatedTime( time, { timeZone: "UTC" } ), "07:05:00" );
checkResult( getTranslatedTime( time, { hourPattern: "HH", minutePattern: "mm", secondPattern: "ss" } ), "07:05:00" );
checkResult( getTranslatedTime( time, { hourPattern: "HH", minutePattern: "mm", secondPattern: "ss", timeZone: "UTC" } ), "07:05:00" );
setLanguageCode( "fr" );
checkResult( getTranslatedTime( time ), "07:05:00" );
checkResult( getTranslatedTime( time, { timeZone: "UTC" } ), "07:05:00" );
checkResult( getTranslatedTime( time, { hourPattern: "HH", minutePattern: "mm", secondPattern: "ss" } ), "07:05:00" );
checkResult( getTranslatedTime( time, { hourPattern: "HH", minutePattern: "mm", secondPattern: "ss", timeZone: "UTC" } ), "07:05:00" );
console.log( "Testing : getTranslatedCountryName" );
setLanguageCode( "en" );
checkResult( getTranslatedCountryName( "US" ), "United States" );
checkResult( getTranslatedCountryName( "FR" ), "France" );
setLanguageCode( "fr" );
checkResult( getTranslatedCountryName( "US" ), "États-Unis" );
checkResult( getTranslatedCountryName( "FR" ), "France" );
console.log( "Testing : getTranslatedLanguageName" );
setLanguageCode( "en" );
checkResult( getTranslatedLanguageName( "en" ), "English" );
checkResult( getTranslatedLanguageName( "fr" ), "French" );
setLanguageCode( "fr" );
checkResult( getTranslatedLanguageName( "en" ), "anglais" );
checkResult( getTranslatedLanguageName( "fr" ), "français" );
console.log( "Testing : getTranslatedCurrencyName" );
setLanguageCode( "en" );
checkResult( getTranslatedCurrencyName( "USD" ), "US Dollar" );
checkResult( getTranslatedCurrencyName( "EUR" ), "Euro" );
setLanguageCode( "fr" );
checkResult( getTranslatedCurrencyName( "USD" ), "dollar des États-Unis" );
checkResult( getTranslatedCurrencyName( "EUR" ), "euro" );
console.log( "Testing : getBrowserLanguageCode" );
let browserLanguageText = "fr-FR,de;q=0.8,en-US;q=0.5,en-GB;q=0.3,es;q=0.2,pt-BR;q=0.1,ru;q=0.1,ja;q=0.1,it;q=0.1,nl-NL;q=0.1";
let browserLanguageCode = getBrowserLanguageCode( browserLanguageText, [ "en", "fr", "de" ], "-" );
checkResult( browserLanguageCode, "fr" );
browserLanguageCode = getBrowserLanguageCode( browserLanguageText, [ "de", "fr" ], "-" );
checkResult( browserLanguageCode, "fr" );
browserLanguageCode = getBrowserLanguageCode( browserLanguageText, [ "da" ] );
checkResult( browserLanguageCode, "" );
console.log( "Testing : getLocalizedText" );
setLanguageSeparator( "¨" );
setDefaultLanguageCode( "en" );
let multilingualText = "trunk¨en-UK,en--OC:boot¨fr:coffre¨pt:mala¨pt-BR:porta-malas";
setLanguageCode( "en" );
setCountryCode( "US" );
let localizedText = getLocalizedText( multilingualText );
checkResult( localizedText, "trunk" );
setLanguageCode( "en" );
setCountryCode( "UK" );
localizedText = getLocalizedText( multilingualText );
checkResult( localizedText, "boot" );
setLanguageCode( "en" );
setCountryCode( "AU" );
localizedText = getLocalizedText( multilingualText );
checkResult( localizedText, "boot" );
setLanguageCode( "fr" );
setCountryCode( "FR" );
localizedText = getLocalizedText( multilingualText );
checkResult( localizedText, "coffre" );
setLanguageCode( "pt" );
setCountryCode( "PT" );
localizedText = getLocalizedText( multilingualText );
checkResult( localizedText, "mala" );
setLanguageCode( "pt" );
setCountryCode( "BR" );
localizedText = getLocalizedText( multilingualText );
checkResult( localizedText, "porta-malas" );
multilingualText = "US¨en-UK,en-AU:UKAU¨fr:FR¨fr-BE,fr-CA:BECA¨pt:PT¨pt-BR:BR";
setLanguageCode( "en" );
setCountryCode( "US" );
localizedText = getLocalizedText( multilingualText );
checkResult( localizedText, "US" );
setLanguageCode( "en" );
setCountryCode( "UK" );
localizedText = getLocalizedText( multilingualText );
checkResult( localizedText, "UKAU" );
setLanguageCode( "en" );
setCountryCode( "AU" );
localizedText = getLocalizedText( multilingualText );
checkResult( localizedText, "UKAU" );
setLanguageCode( "en" );
setCountryCode( "CA" );
localizedText = getLocalizedText( multilingualText );
checkResult( localizedText, "US" );
setLanguageCode( "fr" );
setCountryCode( "FR" );
localizedText = getLocalizedText( multilingualText );
checkResult( localizedText, "FR" );
setLanguageCode( "fr" );
setCountryCode( "BE" );
localizedText = getLocalizedText( multilingualText );
checkResult( localizedText, "BECA" );
setLanguageCode( "fr" );
setCountryCode( "CA" );
localizedText = getLocalizedText( multilingualText );
checkResult( localizedText, "BECA" );
setLanguageCode( "fr" );
setCountryCode( "CH" );
localizedText = getLocalizedText( multilingualText );
checkResult( localizedText, "FR" );
setLanguageCode( "de" );
setCountryCode( "CH" );
localizedText = getLocalizedText( multilingualText );
checkResult( localizedText, "US" );
setLanguageCode( "en" );
setCountryCode( "FR" );
localizedText = getLocalizedText( multilingualText );
checkResult( localizedText, "US" );
multilingualText = "{count} bathrooms¨en?count=1:{count} bathroom¨fr:{count} salles de bain¨fr?count<2:{count} salle de bain";
setLanguageCode( "en" );
setCountryCode( "US" );
localizedText = getLocalizedText( multilingualText, { count: 0 } );
checkResult( localizedText, "0 bathrooms" );
localizedText = getLocalizedText( multilingualText, { count: 1 } );
checkResult( localizedText, "1 bathroom" );
localizedText = getLocalizedText( multilingualText, { count: 2 } );
checkResult( localizedText, "2 bathrooms" );
setLanguageCode( "fr" );
setCountryCode( "FR" );
localizedText = getLocalizedText( multilingualText, { count: 0 } );
checkResult( localizedText, "0 salle de bain" );
localizedText = getLocalizedText( multilingualText, { count: 1 } );
checkResult( localizedText, "1 salle de bain" );
localizedText = getLocalizedText( multilingualText, { count: 2 } );
checkResult( localizedText, "2 salles de bain" );
multilingualText = "¨en?count=0,count>=2:{count} bathrooms¨en?count=1:{count} bathroom¨fr:{count} salles de bain¨fr?count=0,count=1:{count} salle de bain";
setLanguageCode( "en" );
setCountryCode( "US" );
localizedText = getLocalizedText( multilingualText, { count: 0 } );
checkResult( localizedText, "0 bathrooms" );
localizedText = getLocalizedText( multilingualText, { count: 1 } );
checkResult( localizedText, "1 bathroom" );
localizedText = getLocalizedText( multilingualText, { count: 2 } );
checkResult( localizedText, "2 bathrooms" );
setLanguageCode( "fr" );
setCountryCode( "FR" );
localizedText = getLocalizedText( multilingualText, { count: 0 } );
checkResult( localizedText, "0 salle de bain" );
localizedText = getLocalizedText( multilingualText, { count: 1 } );
checkResult( localizedText, "1 salle de bain" );
localizedText = getLocalizedText( multilingualText, { count: 2 } );
checkResult( localizedText, "2 salles de bain" );
console.log( "Testing : getProcessedText" );
defineLineTag( "! ", '<div class="paragraph title-1">', "</div>" );
defineLineTag( "!! ", '<div class="paragraph title-2">', "</div>" );
defineLineTag( "!!! ", '<div class="paragraph title-3">', "</div>" );
defineLineTag( "!!!! ", '<div class="paragraph title-4">', "</div>" );
defineLineTag( "- ", '<div class="paragraph dash-1">', "</div>" );
defineLineTag( " - ", '<div class="paragraph dash-2">', "</div>" );
defineLineTag( " - ", '<div class="paragraph dash-3">', "</div>" );
defineLineTag( " - ", '<div class="paragraph dash-4">', "</div>" );
defineLineTag( "* ", '<div class="paragraph bullet-1">', "</div>" );
defineLineTag( " * ", '<div class="paragraph bullet-2">', "</div>" );
defineLineTag( " * ", '<div class="paragraph bullet-3">', "</div>" );
defineLineTag( " * ", '<div class="paragraph bullet-4">', "</div>" );
defineLineTag( "# ", '<div class="paragraph numbered-bullet-1"><div>', "</div><div>", "</div></div>" );
defineLineTag( " # ", '<div class="paragraph numbered-bullet-2"><div>', "</div><div>", "</div></div>" );
defineLineTag( " # ", '<div class="paragraph numbered-bullet-3"><div>', "</div><div>", "</div></div>" );
defineLineTag( " # ", '<div class="paragraph numbered-bullet-4"><div>', "</div><div>", "</div></div>" );
defineLineTag( "", '<div class="paragraph">', "</div>" );
defineDualTag( "**", "<b>", "</b>" );
defineDualTag( "%%", "<i>", "</i>" );
defineDualTag( "__", "<u>", "</u>" );
defineDualTag( ",,", "<sub>", "</sub>" );
defineDualTag( "^^", "<sup>", "</sup>" );
defineTag( "~", " " );
defineTag( "¦", "<wbr/>" );
defineTag( "§", "<br/>" );
defineTag( "¶", '<br class="linebreak"/>' );
defineTag( "((", '<a class="link" href="' );
defineTag( ")(", '" target="_blank">' );
defineTag( "))", "</a>" );
defineTag( "¬", "" );
defineColorTag( "red" );
defineColorTag( "green", "#0F0" );
let processedText = getProcessedText( "**bold** %%italics%% __underlined__ ~¦§¶ ((https://dailykitten.com)(Daily Kitten))" );
console.log( processedText );
checkResult( processedText, '<b>bold</b> <i>italics</i> <u>underlined</u> <wbr/><br/><br class="linebreak"/> <a class="link" href="https://dailykitten.com" target="_blank">Daily Kitten</a>' );
processedText = getProcessedMultilineText( "! **bold**\n!! %%italics%%\n__underlined__" );
console.log( processedText );
checkResult( processedText, '<div class="paragraph title-1"><b>bold</b></div>\n<div class="paragraph title-2"><i>italics</i></div>\n<div class="paragraph"><u>underlined</u></div>' );
processedText = getProcessedMultilineText( "- dash\n - dash\n* bullet\n * bullet\n# 1. numbered bullet\n # a. numbered bullet" );
console.log( processedText );
checkResult( processedText, '<div class="paragraph dash-1">dash</div>\n<div class="paragraph dash-2">dash</div>\n<div class="paragraph bullet-1">bullet</div>\n<div class="paragraph bullet-2">bullet</div>\n<div class="paragraph numbered-bullet-1"><div>1.</div><div>numbered bullet</div></div>\n<div class="paragraph numbered-bullet-2"><div>a.</div><div>numbered bullet</div></div>' );
console.log( "All tests passed!" );
}
// -- STATEMENTS
runTests();