| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177 |
- import { Trans, useTranslation } from 'react-i18next'
- describe('i18n', function () {
- describe('t', function () {
- it('translates a plain string', function () {
- const Test = () => {
- const { t } = useTranslation()
- return <div>{t('accept_change')}</div>
- }
- cy.mount(<Test />)
- cy.findByText('Accept change')
- })
- it('uses defaultValues', function () {
- const Test = () => {
- const { t } = useTranslation()
- return <div>{t('welcome_to_sl')}</div>
- }
- cy.mount(<Test />)
- cy.findByText('Welcome to Overleaf')
- })
- it('uses values', function () {
- const Test = () => {
- const { t } = useTranslation()
- return <div>{t('sort_by_x', { x: 'name' })}</div>
- }
- cy.mount(<Test />)
- cy.findByText('Sort by name')
- })
- })
- describe('Trans', function () {
- it('uses values', function () {
- const Test = () => {
- return (
- <div>
- <Trans
- i18nKey="sort_by_x"
- values={{ x: 'name' }}
- shouldUnescape
- tOptions={{ interpolation: { escapeValue: true } }}
- />
- </div>
- )
- }
- cy.mount(<Test />)
- cy.findByText('Sort by name')
- })
- it('uses an object of components', function () {
- const Test = () => {
- return (
- <div data-testid="container">
- <Trans
- i18nKey="in_order_to_match_institutional_metadata_associated"
- components={{ b: <b /> }}
- values={{ email: 'test@example.com' }}
- shouldUnescape
- tOptions={{ interpolation: { escapeValue: true } }}
- />
- </div>
- )
- }
- cy.mount(<Test />)
- cy.findByTestId('container')
- .should(
- 'have.text',
- 'In order to match your institutional metadata, your account is associated with the email test@example.com.'
- )
- .find('b')
- .should('have.length', 1)
- .should('have.text', 'test@example.com')
- })
- it('uses an array of components', function () {
- const Test = () => {
- return (
- <div data-testid="container">
- <Trans
- i18nKey="are_you_still_at"
- components={[<b />]} // eslint-disable-line react/jsx-key
- values={{ institutionName: 'Test' }}
- shouldUnescape
- tOptions={{ interpolation: { escapeValue: true } }}
- />
- </div>
- )
- }
- cy.mount(<Test />)
- cy.findByTestId('container')
- .should('have.text', 'Are you still at Test?')
- .find('b')
- .should('have.length', 1)
- .should('have.text', 'Test')
- })
- it('escapes special characters', function () {
- const Test = () => {
- return (
- <div data-testid="container">
- <Trans
- i18nKey="are_you_still_at"
- components={[<b />]} // eslint-disable-line react/jsx-key
- values={{ institutionName: "T&e's<code>t</code>ing" }}
- shouldUnescape
- tOptions={{ interpolation: { escapeValue: true } }}
- />
- </div>
- )
- }
- cy.mount(<Test />)
- cy.findByTestId('container')
- .should('have.text', "Are you still at T&e's<code>t</code>ing?")
- .find('b')
- .should('have.length', 1)
- .should('have.text', "T&e's<code>t</code>ing")
- })
- it('does not convert markup in values to components', function () {
- const Test = () => {
- return (
- <div data-testid="container">
- <Trans
- i18nKey="are_you_still_at"
- components={[<b />]} // eslint-disable-line react/jsx-key
- values={{
- institutionName: "<i>T</i>&<b>e</b>'s<code>t</code>ing",
- }}
- shouldUnescape
- tOptions={{ interpolation: { escapeValue: true } }}
- />
- </div>
- )
- }
- cy.mount(<Test />)
- cy.findByTestId('container')
- .should(
- 'have.text',
- "Are you still at <i>T</i>&<b>e</b>'s<code>t</code>ing?"
- )
- .find('b')
- .should('have.length', 1)
- .should('have.text', "<i>T</i>&<b>e</b>'s<code>t</code>ing")
- })
- })
- describe('plurals', function () {
- // See https://www.i18next.com/misc/json-format#i-18-next-json-v3
- it('picks singular for count=1', function () {
- const Test = () => {
- const { t } = useTranslation()
- return <div>{t('project_search_file_count', { count: 1 })}</div>
- }
- cy.mount(<Test />)
- cy.findByText('in 1 file')
- })
- it('picks plural for count>1', function () {
- const Test = () => {
- const { t } = useTranslation()
- return <div>{t('project_search_file_count', { count: 5 })}</div>
- }
- cy.mount(<Test />)
- cy.findByText('in 5 files')
- })
- it('picks plural for count=0', function () {
- const Test = () => {
- const { t } = useTranslation()
- return <div>{t('project_search_file_count', { count: 0 })}</div>
- }
- cy.mount(<Test />)
- cy.findByText('in 0 files')
- })
- })
- })
|