UNPKG

senselogic-lingo

Version:

Text localization and processing.

366 lines (285 loc) 16.6 kB
// -- 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( "~", "&nbsp;" ); 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> &nbsp;<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();