mirror of
https://github.com/DOI-DO/j40-cejst-2.git
synced 2025-02-21 09:11:26 -08:00
Add Spanish to site (#1541)
* Add script to un-nest the translated es.json file * Update unit tests * Update i18n IDs to conformity * Update READMEs * Make ordinal values in sidepanel i18n compliant * remove redudant IDs in en.json * Add oridinal i18n to IndicatorValue sub-text * Update plurals in sidepanel - Disadvantaged in 1 category - Disadvantaged in 5 categories - At or above 1 threshold - At or above 10 thresholds * Add en.json link to GHA * Enable FormatJS linter rules to catch i18n issues * Testing if commit hash will render in PR message * Testing if commit hash will render in PR message * Enable allow repeats * Try to add run command * remove attempts to link to en.json * Define COMMIT HASH env variable * Move commit hash to deploy job
This commit is contained in:
parent
181b6f4919
commit
ce6f7974fb
22 changed files with 1821 additions and 506 deletions
9
.github/workflows/deploy_fe_staging.yml
vendored
9
.github/workflows/deploy_fe_staging.yml
vendored
|
@ -77,6 +77,9 @@ jobs:
|
|||
- name: Set DESTINATION_FOLDER for branch
|
||||
run: |
|
||||
echo "DESTINATION_FOLDER=$(echo $PR_NUMBER-$GITHUB_SHA | cut -c 1-11)" >> $GITHUB_ENV
|
||||
- name: Set COMMIT_HASH for branch
|
||||
run: |
|
||||
echo "COMMIT_HASH=$(echo $GITHUB_SHA)" >> $GITHUB_ENV
|
||||
- name: Configure AWS Credentials
|
||||
uses: aws-actions/configure-aws-credentials@v1
|
||||
with:
|
||||
|
@ -106,8 +109,8 @@ jobs:
|
|||
with:
|
||||
message: |
|
||||
** 👋 Attention translators!! 👋 **
|
||||
Copy changes have resulted in a new en.json file. Please translate all other language files.
|
||||
Copy changes have resulted in a new en.json file. Please download en.json file and send to translators: https://github.com/usds/justice40-tool/blob/${{env.COMMIT_HASH}}/client/src/intl/en.json
|
||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
repo-token-user-login: "github-actions[bot]" # The user.login for temporary GitHub tokens
|
||||
allow-repeats: false # This is the default
|
||||
if: contains(steps.changed-files.outputs.modified_files, 'client/src/intl/en.json')
|
||||
allow-repeats: true
|
||||
if: contains(steps.changed-files.outputs.modified_files, 'client/src/intl/en.json')
|
|
@ -25,6 +25,9 @@ module.exports = {
|
|||
'rules': {
|
||||
'max-len': [2, {'code': 120, 'tabWidth': 4, 'ignoreUrls': true}],
|
||||
'formatjs/no-offset': 'error',
|
||||
'formatjs/enforce-description': 'error',
|
||||
'formatjs/enforce-default-message': 'error',
|
||||
'formatjs/enforce-placeholders': 'error',
|
||||
},
|
||||
'settings': {
|
||||
'react': {
|
||||
|
|
|
@ -34,7 +34,7 @@ interface IAreaDetailProps {
|
|||
export interface indicatorInfo {
|
||||
label: string,
|
||||
description: string,
|
||||
value: number,
|
||||
value: number | null,
|
||||
isDisadvagtaged: boolean,
|
||||
isPercent?: boolean,
|
||||
threshold?: number,
|
||||
|
|
|
@ -137,10 +137,10 @@ exports[`rendering of the AreaDetail checks if indicators for ISLAND AREAS are p
|
|||
<div>
|
||||
<div>
|
||||
60
|
||||
<sup>
|
||||
<span>
|
||||
th
|
||||
</span>
|
||||
<sup
|
||||
style="top: -0.2em;"
|
||||
>
|
||||
th
|
||||
</sup>
|
||||
</div>
|
||||
<div>
|
||||
|
@ -152,10 +152,13 @@ exports[`rendering of the AreaDetail checks if indicators for ISLAND AREAS are p
|
|||
</div>
|
||||
<div>
|
||||
<div>
|
||||
below 90th
|
||||
</div>
|
||||
<div>
|
||||
percentile
|
||||
below 90
|
||||
<sup
|
||||
style="top: -0.2em;"
|
||||
>
|
||||
th
|
||||
</sup>
|
||||
percentile
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -176,10 +179,10 @@ exports[`rendering of the AreaDetail checks if indicators for ISLAND AREAS are p
|
|||
<div>
|
||||
<div>
|
||||
90
|
||||
<sup>
|
||||
<span>
|
||||
th
|
||||
</span>
|
||||
<sup
|
||||
style="top: -0.2em;"
|
||||
>
|
||||
th
|
||||
</sup>
|
||||
</div>
|
||||
<div>
|
||||
|
@ -191,10 +194,13 @@ exports[`rendering of the AreaDetail checks if indicators for ISLAND AREAS are p
|
|||
</div>
|
||||
<div>
|
||||
<div>
|
||||
above 90th
|
||||
</div>
|
||||
<div>
|
||||
percentile
|
||||
above 90
|
||||
<sup
|
||||
style="top: -0.2em;"
|
||||
>
|
||||
th
|
||||
</sup>
|
||||
percentile
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -218,10 +224,10 @@ exports[`rendering of the AreaDetail checks if indicators for ISLAND AREAS are p
|
|||
<div>
|
||||
<div>
|
||||
50
|
||||
<sup>
|
||||
<span>
|
||||
th
|
||||
</span>
|
||||
<sup
|
||||
style="top: -0.2em;"
|
||||
>
|
||||
th
|
||||
</sup>
|
||||
</div>
|
||||
<div>
|
||||
|
@ -233,10 +239,13 @@ exports[`rendering of the AreaDetail checks if indicators for ISLAND AREAS are p
|
|||
</div>
|
||||
<div>
|
||||
<div>
|
||||
below 90th
|
||||
</div>
|
||||
<div>
|
||||
percentile
|
||||
below 90
|
||||
<sup
|
||||
style="top: -0.2em;"
|
||||
>
|
||||
th
|
||||
</sup>
|
||||
percentile
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -592,10 +601,10 @@ exports[`rendering of the AreaDetail checks if indicators for NATION is present
|
|||
<div>
|
||||
<div>
|
||||
19
|
||||
<sup>
|
||||
<span>
|
||||
th
|
||||
</span>
|
||||
<sup
|
||||
style="top: -0.2em;"
|
||||
>
|
||||
th
|
||||
</sup>
|
||||
</div>
|
||||
<div>
|
||||
|
@ -607,10 +616,13 @@ exports[`rendering of the AreaDetail checks if indicators for NATION is present
|
|||
</div>
|
||||
<div>
|
||||
<div>
|
||||
below 65th
|
||||
</div>
|
||||
<div>
|
||||
percentile
|
||||
below 65
|
||||
<sup
|
||||
style="top: -0.2em;"
|
||||
>
|
||||
th
|
||||
</sup>
|
||||
percentile
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -769,10 +781,10 @@ exports[`rendering of the AreaDetail checks if indicators for NATION is present
|
|||
<div>
|
||||
<div>
|
||||
19
|
||||
<sup>
|
||||
<span>
|
||||
th
|
||||
</span>
|
||||
<sup
|
||||
style="top: -0.2em;"
|
||||
>
|
||||
th
|
||||
</sup>
|
||||
</div>
|
||||
<div>
|
||||
|
@ -784,10 +796,13 @@ exports[`rendering of the AreaDetail checks if indicators for NATION is present
|
|||
</div>
|
||||
<div>
|
||||
<div>
|
||||
below 65th
|
||||
</div>
|
||||
<div>
|
||||
percentile
|
||||
below 65
|
||||
<sup
|
||||
style="top: -0.2em;"
|
||||
>
|
||||
th
|
||||
</sup>
|
||||
percentile
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -946,10 +961,10 @@ exports[`rendering of the AreaDetail checks if indicators for NATION is present
|
|||
<div>
|
||||
<div>
|
||||
19
|
||||
<sup>
|
||||
<span>
|
||||
th
|
||||
</span>
|
||||
<sup
|
||||
style="top: -0.2em;"
|
||||
>
|
||||
th
|
||||
</sup>
|
||||
</div>
|
||||
<div>
|
||||
|
@ -961,10 +976,13 @@ exports[`rendering of the AreaDetail checks if indicators for NATION is present
|
|||
</div>
|
||||
<div>
|
||||
<div>
|
||||
below 65th
|
||||
</div>
|
||||
<div>
|
||||
percentile
|
||||
below 65
|
||||
<sup
|
||||
style="top: -0.2em;"
|
||||
>
|
||||
th
|
||||
</sup>
|
||||
percentile
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -1052,10 +1070,10 @@ exports[`rendering of the AreaDetail checks if indicators for NATION is present
|
|||
<div>
|
||||
<div>
|
||||
95
|
||||
<sup>
|
||||
<span>
|
||||
th
|
||||
</span>
|
||||
<sup
|
||||
style="top: -0.2em;"
|
||||
>
|
||||
th
|
||||
</sup>
|
||||
</div>
|
||||
<div>
|
||||
|
@ -1067,10 +1085,13 @@ exports[`rendering of the AreaDetail checks if indicators for NATION is present
|
|||
</div>
|
||||
<div>
|
||||
<div>
|
||||
above 90th
|
||||
</div>
|
||||
<div>
|
||||
percentile
|
||||
above 90
|
||||
<sup
|
||||
style="top: -0.2em;"
|
||||
>
|
||||
th
|
||||
</sup>
|
||||
percentile
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -1135,10 +1156,10 @@ exports[`rendering of the AreaDetail checks if indicators for NATION is present
|
|||
<div>
|
||||
<div>
|
||||
19
|
||||
<sup>
|
||||
<span>
|
||||
th
|
||||
</span>
|
||||
<sup
|
||||
style="top: -0.2em;"
|
||||
>
|
||||
th
|
||||
</sup>
|
||||
</div>
|
||||
<div>
|
||||
|
@ -1150,10 +1171,13 @@ exports[`rendering of the AreaDetail checks if indicators for NATION is present
|
|||
</div>
|
||||
<div>
|
||||
<div>
|
||||
below 65th
|
||||
</div>
|
||||
<div>
|
||||
percentile
|
||||
below 65
|
||||
<sup
|
||||
style="top: -0.2em;"
|
||||
>
|
||||
th
|
||||
</sup>
|
||||
percentile
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -1341,10 +1365,10 @@ exports[`rendering of the AreaDetail checks if indicators for NATION is present
|
|||
<div>
|
||||
<div>
|
||||
19
|
||||
<sup>
|
||||
<span>
|
||||
th
|
||||
</span>
|
||||
<sup
|
||||
style="top: -0.2em;"
|
||||
>
|
||||
th
|
||||
</sup>
|
||||
</div>
|
||||
<div>
|
||||
|
@ -1356,10 +1380,13 @@ exports[`rendering of the AreaDetail checks if indicators for NATION is present
|
|||
</div>
|
||||
<div>
|
||||
<div>
|
||||
below 65th
|
||||
</div>
|
||||
<div>
|
||||
percentile
|
||||
below 65
|
||||
<sup
|
||||
style="top: -0.2em;"
|
||||
>
|
||||
th
|
||||
</sup>
|
||||
percentile
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -1489,10 +1516,10 @@ exports[`rendering of the AreaDetail checks if indicators for NATION is present
|
|||
<div>
|
||||
<div>
|
||||
19
|
||||
<sup>
|
||||
<span>
|
||||
th
|
||||
</span>
|
||||
<sup
|
||||
style="top: -0.2em;"
|
||||
>
|
||||
th
|
||||
</sup>
|
||||
</div>
|
||||
<div>
|
||||
|
@ -1504,10 +1531,13 @@ exports[`rendering of the AreaDetail checks if indicators for NATION is present
|
|||
</div>
|
||||
<div>
|
||||
<div>
|
||||
below 65th
|
||||
</div>
|
||||
<div>
|
||||
percentile
|
||||
below 65
|
||||
<sup
|
||||
style="top: -0.2em;"
|
||||
>
|
||||
th
|
||||
</sup>
|
||||
percentile
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -1727,10 +1757,10 @@ exports[`rendering of the AreaDetail checks if indicators for NATION is present
|
|||
<div>
|
||||
<div>
|
||||
19
|
||||
<sup>
|
||||
<span>
|
||||
th
|
||||
</span>
|
||||
<sup
|
||||
style="top: -0.2em;"
|
||||
>
|
||||
th
|
||||
</sup>
|
||||
</div>
|
||||
<div>
|
||||
|
@ -1742,10 +1772,13 @@ exports[`rendering of the AreaDetail checks if indicators for NATION is present
|
|||
</div>
|
||||
<div>
|
||||
<div>
|
||||
below 65th
|
||||
</div>
|
||||
<div>
|
||||
percentile
|
||||
below 65
|
||||
<sup
|
||||
style="top: -0.2em;"
|
||||
>
|
||||
th
|
||||
</sup>
|
||||
percentile
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -1835,10 +1868,10 @@ exports[`rendering of the AreaDetail checks if indicators for NATION is present
|
|||
<div>
|
||||
<div>
|
||||
97
|
||||
<sup>
|
||||
<span>
|
||||
th
|
||||
</span>
|
||||
<sup
|
||||
style="top: -0.2em;"
|
||||
>
|
||||
th
|
||||
</sup>
|
||||
</div>
|
||||
<div>
|
||||
|
@ -1850,10 +1883,13 @@ exports[`rendering of the AreaDetail checks if indicators for NATION is present
|
|||
</div>
|
||||
<div>
|
||||
<div>
|
||||
above 90th
|
||||
</div>
|
||||
<div>
|
||||
percentile
|
||||
above 90
|
||||
<sup
|
||||
style="top: -0.2em;"
|
||||
>
|
||||
th
|
||||
</sup>
|
||||
percentile
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -1903,10 +1939,10 @@ exports[`rendering of the AreaDetail checks if indicators for NATION is present
|
|||
<div>
|
||||
<div>
|
||||
96
|
||||
<sup>
|
||||
<span>
|
||||
th
|
||||
</span>
|
||||
<sup
|
||||
style="top: -0.2em;"
|
||||
>
|
||||
th
|
||||
</sup>
|
||||
</div>
|
||||
<div>
|
||||
|
@ -1918,10 +1954,13 @@ exports[`rendering of the AreaDetail checks if indicators for NATION is present
|
|||
</div>
|
||||
<div>
|
||||
<div>
|
||||
above 90th
|
||||
</div>
|
||||
<div>
|
||||
percentile
|
||||
above 90
|
||||
<sup
|
||||
style="top: -0.2em;"
|
||||
>
|
||||
th
|
||||
</sup>
|
||||
percentile
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -1945,10 +1984,10 @@ exports[`rendering of the AreaDetail checks if indicators for NATION is present
|
|||
<div>
|
||||
<div>
|
||||
12
|
||||
<sup>
|
||||
<span>
|
||||
th
|
||||
</span>
|
||||
<sup
|
||||
style="top: -0.2em;"
|
||||
>
|
||||
th
|
||||
</sup>
|
||||
</div>
|
||||
<div>
|
||||
|
@ -1960,10 +1999,13 @@ exports[`rendering of the AreaDetail checks if indicators for NATION is present
|
|||
</div>
|
||||
<div>
|
||||
<div>
|
||||
below 90th
|
||||
</div>
|
||||
<div>
|
||||
percentile
|
||||
below 90
|
||||
<sup
|
||||
style="top: -0.2em;"
|
||||
>
|
||||
th
|
||||
</sup>
|
||||
percentile
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -1996,9 +2038,8 @@ exports[`rendering of the AreaDetail checks if indicators for NATION is present
|
|||
<div>
|
||||
<div>
|
||||
<div>
|
||||
98
|
||||
<span>
|
||||
%
|
||||
98%
|
||||
</span>
|
||||
</div>
|
||||
<div>
|
||||
|
@ -2010,10 +2051,11 @@ exports[`rendering of the AreaDetail checks if indicators for NATION is present
|
|||
</div>
|
||||
<div>
|
||||
<div>
|
||||
above 10
|
||||
</div>
|
||||
<div>
|
||||
percent
|
||||
above
|
||||
<span>
|
||||
10%
|
||||
</span>
|
||||
percent
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -2196,10 +2238,10 @@ exports[`rendering of the AreaDetail checks if indicators for PUERTO RICO are pr
|
|||
<div>
|
||||
<div>
|
||||
97
|
||||
<sup>
|
||||
<span>
|
||||
th
|
||||
</span>
|
||||
<sup
|
||||
style="top: -0.2em;"
|
||||
>
|
||||
th
|
||||
</sup>
|
||||
</div>
|
||||
<div>
|
||||
|
@ -2211,10 +2253,13 @@ exports[`rendering of the AreaDetail checks if indicators for PUERTO RICO are pr
|
|||
</div>
|
||||
<div>
|
||||
<div>
|
||||
above 90th
|
||||
</div>
|
||||
<div>
|
||||
percentile
|
||||
above 90
|
||||
<sup
|
||||
style="top: -0.2em;"
|
||||
>
|
||||
th
|
||||
</sup>
|
||||
percentile
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -2264,10 +2309,10 @@ exports[`rendering of the AreaDetail checks if indicators for PUERTO RICO are pr
|
|||
<div>
|
||||
<div>
|
||||
96
|
||||
<sup>
|
||||
<span>
|
||||
th
|
||||
</span>
|
||||
<sup
|
||||
style="top: -0.2em;"
|
||||
>
|
||||
th
|
||||
</sup>
|
||||
</div>
|
||||
<div>
|
||||
|
@ -2279,10 +2324,13 @@ exports[`rendering of the AreaDetail checks if indicators for PUERTO RICO are pr
|
|||
</div>
|
||||
<div>
|
||||
<div>
|
||||
above 90th
|
||||
</div>
|
||||
<div>
|
||||
percentile
|
||||
above 90
|
||||
<sup
|
||||
style="top: -0.2em;"
|
||||
>
|
||||
th
|
||||
</sup>
|
||||
percentile
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -2306,10 +2354,10 @@ exports[`rendering of the AreaDetail checks if indicators for PUERTO RICO are pr
|
|||
<div>
|
||||
<div>
|
||||
12
|
||||
<sup>
|
||||
<span>
|
||||
th
|
||||
</span>
|
||||
<sup
|
||||
style="top: -0.2em;"
|
||||
>
|
||||
th
|
||||
</sup>
|
||||
</div>
|
||||
<div>
|
||||
|
@ -2321,10 +2369,13 @@ exports[`rendering of the AreaDetail checks if indicators for PUERTO RICO are pr
|
|||
</div>
|
||||
<div>
|
||||
<div>
|
||||
below 90th
|
||||
</div>
|
||||
<div>
|
||||
percentile
|
||||
below 90
|
||||
<sup
|
||||
style="top: -0.2em;"
|
||||
>
|
||||
th
|
||||
</sup>
|
||||
percentile
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -2357,9 +2408,8 @@ exports[`rendering of the AreaDetail checks if indicators for PUERTO RICO are pr
|
|||
<div>
|
||||
<div>
|
||||
<div>
|
||||
98
|
||||
<span>
|
||||
%
|
||||
98%
|
||||
</span>
|
||||
</div>
|
||||
<div>
|
||||
|
@ -2371,10 +2421,11 @@ exports[`rendering of the AreaDetail checks if indicators for PUERTO RICO are pr
|
|||
</div>
|
||||
<div>
|
||||
<div>
|
||||
above 10
|
||||
</div>
|
||||
<div>
|
||||
percent
|
||||
above
|
||||
<span>
|
||||
10%
|
||||
</span>
|
||||
percent
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -47,10 +47,6 @@
|
|||
|
||||
.indicatorValue {
|
||||
margin-left: 2.2rem;
|
||||
|
||||
.indicatorSuperscript {
|
||||
top: -0.2em
|
||||
}
|
||||
}
|
||||
|
||||
.indicatorArrow {
|
||||
|
@ -73,6 +69,7 @@
|
|||
flex-direction: column;
|
||||
align-self: flex-end;
|
||||
text-align: right;
|
||||
@include u-width(8);
|
||||
@include typeset('sans', '3xs', 2);
|
||||
@include u-text('thin');
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import * as React from 'react';
|
||||
import {render, screen} from '@testing-library/react';
|
||||
import {LocalizedComponent} from '../../test/testHelpers';
|
||||
import Indicator, {IndicatorValueIcon, IndicatorValueSubText, DisplayStatUnit} from './Indicator';
|
||||
import Indicator, {IndicatorValueIcon, IndicatorValueSubText, IndicatorValue} from './Indicator';
|
||||
import {indicatorInfo} from '../AreaDetail/AreaDetail';
|
||||
|
||||
import * as EXPLORE_COPY from '../../data/copy/explore';
|
||||
|
@ -9,7 +9,7 @@ import * as EXPLORE_COPY from '../../data/copy/explore';
|
|||
const highSchool:indicatorInfo = {
|
||||
label: 'some label',
|
||||
description: 'some description',
|
||||
value: 97,
|
||||
value: .97,
|
||||
isDisadvagtaged: true,
|
||||
isPercent: true,
|
||||
threshold: 20,
|
||||
|
@ -136,8 +136,8 @@ describe('test that the unit suffix renders correctly', ()=> {
|
|||
|
||||
const {asFragment} = render(
|
||||
<LocalizedComponent>
|
||||
<DisplayStatUnit
|
||||
indicator={lowLife}
|
||||
<IndicatorValue
|
||||
isPercent={lowLife.isPercent}
|
||||
displayStat={90}
|
||||
/>
|
||||
</LocalizedComponent>,
|
||||
|
@ -156,8 +156,8 @@ describe('test that the unit suffix renders correctly', ()=> {
|
|||
|
||||
const {asFragment} = render(
|
||||
<LocalizedComponent>
|
||||
<DisplayStatUnit
|
||||
indicator={lowLife}
|
||||
<IndicatorValue
|
||||
isPercent={lowLife.isPercent}
|
||||
displayStat={90}
|
||||
/>
|
||||
</LocalizedComponent>,
|
||||
|
@ -175,8 +175,8 @@ describe('test that the unit suffix renders correctly', ()=> {
|
|||
|
||||
const {asFragment} = render(
|
||||
<LocalizedComponent>
|
||||
<DisplayStatUnit
|
||||
indicator={lowLife}
|
||||
<IndicatorValue
|
||||
isPercent={lowLife.isPercent}
|
||||
displayStat={null}
|
||||
/>
|
||||
</LocalizedComponent>,
|
||||
|
|
|
@ -30,8 +30,8 @@ interface IIndicatorValueSubText {
|
|||
isPercent: boolean | undefined,
|
||||
}
|
||||
|
||||
interface IDisplayStatUnit {
|
||||
indicator: indicatorInfo,
|
||||
interface IIndicatorValue {
|
||||
isPercent: boolean | undefined,
|
||||
displayStat: number | null,
|
||||
}
|
||||
|
||||
|
@ -78,63 +78,87 @@ export const IndicatorValueSubText = ({value, isAboveThresh, threshold, isPercen
|
|||
<div>
|
||||
{EXPLORE_COPY.SIDE_PANEL_VALUES.UNAVAILBLE_MSG}
|
||||
</div> :
|
||||
<React.Fragment>
|
||||
<div>
|
||||
{
|
||||
isAboveThresh ?
|
||||
EXPLORE_COPY.SIDE_PANEL_VALUES.ABOVE :
|
||||
EXPLORE_COPY.SIDE_PANEL_VALUES.BELOW
|
||||
}
|
||||
{`${threshold ? threshold : 90}`}
|
||||
<div>
|
||||
{
|
||||
isAboveThresh ?
|
||||
EXPLORE_COPY.SIDE_PANEL_VALUES.ABOVE :
|
||||
EXPLORE_COPY.SIDE_PANEL_VALUES.BELOW
|
||||
}
|
||||
{threshold ?
|
||||
<IndicatorValue isPercent={isPercent} displayStat={threshold} /> :
|
||||
<IndicatorValue isPercent={isPercent} displayStat={90} />
|
||||
}
|
||||
|
||||
{!isPercent && `th`}
|
||||
</div>
|
||||
<div>
|
||||
{
|
||||
isPercent ?
|
||||
EXPLORE_COPY.SIDE_PANEL_VALUES.PERCENT :
|
||||
EXPLORE_COPY.SIDE_PANEL_VALUES.PERCENTILE
|
||||
}
|
||||
</div>
|
||||
</React.Fragment>;
|
||||
{/* {!isPercent && `th`} */}
|
||||
{` `}
|
||||
{
|
||||
isPercent ?
|
||||
EXPLORE_COPY.SIDE_PANEL_VALUES.PERCENT :
|
||||
EXPLORE_COPY.SIDE_PANEL_VALUES.PERCENTILE
|
||||
}
|
||||
</div>;
|
||||
};
|
||||
|
||||
/**
|
||||
* This component will return the value suffix as either a percent or
|
||||
* ordinal value of the displayed statistic
|
||||
* The react-i18n library allow to add ordinal suffix (st, nd, rd, th) to indicator values.
|
||||
* The number and the suffix is a single entity. We are looking to add styling to
|
||||
* just the suffix portion if the value is a percentile. This function will add
|
||||
* a superscript styling to just the suffix portion of percentile values.
|
||||
*
|
||||
* @return {JSX.Element}
|
||||
* @param {string} indicatorValueWithSuffix
|
||||
* @return {string}
|
||||
*/
|
||||
export const DisplayStatUnit = ({indicator, displayStat}:IDisplayStatUnit) => {
|
||||
if (indicator.value !== null) {
|
||||
return indicator.isPercent ?
|
||||
<span>{`%`}</span> :
|
||||
<sup className={styles.indicatorSuperscript}>
|
||||
<span>{getSuperscriptOrdinal(displayStat)}</span>
|
||||
</sup>;
|
||||
} else {
|
||||
return <React.Fragment></React.Fragment>;
|
||||
}
|
||||
export const superscriptOrdinal = (indicatorValueWithSuffix:string) => {
|
||||
const valueRegEx = /[0-9]{1,2}/;
|
||||
const suffixRegEx = /[a-z]{2}/; // ie, (st, nd, rd, th)
|
||||
|
||||
const indicatorValue = valueRegEx.exec(indicatorValueWithSuffix);
|
||||
const ordinalSuffix = suffixRegEx.exec(indicatorValueWithSuffix);
|
||||
|
||||
return <>{indicatorValue}<sup style={{top: '-0.2em'}}>{ordinalSuffix}</sup></>;
|
||||
};
|
||||
|
||||
/**
|
||||
* This component will return the indicators's value with an ordinal suffix
|
||||
* or a percentage sign using i18n functions
|
||||
*
|
||||
* @return {JSX.Element | null}
|
||||
*/
|
||||
export const IndicatorValue = ({isPercent, displayStat}:IIndicatorValue) => {
|
||||
const intl = useIntl();
|
||||
|
||||
// Todo: Add internationalization to superscript ticket #582
|
||||
export const getSuperscriptOrdinal = (percentile: number | string | null) => {
|
||||
if (percentile === null) return '';
|
||||
if (typeof percentile === 'number') {
|
||||
const englishOrdinalRules = new Intl.PluralRules('en', {
|
||||
type: 'ordinal',
|
||||
});
|
||||
const suffixes = {
|
||||
zero: 'th',
|
||||
one: 'st',
|
||||
two: 'nd',
|
||||
few: 'rd',
|
||||
many: 'th',
|
||||
other: 'th',
|
||||
};
|
||||
return suffixes[englishOrdinalRules.select(percentile)];
|
||||
}
|
||||
if (displayStat === null) return <React.Fragment></React.Fragment>;
|
||||
|
||||
const i18nOrdinalSuffix: string = intl.formatMessage(
|
||||
{
|
||||
id: 'explore.tool.page.side.panel.indicator.percentile.value.ordinal.suffix',
|
||||
// eslint-disable-next-line max-len
|
||||
description: `Navigate to the explore the tool page. Click on the map. The side panel will show categories. Open a category. This will define the indicator value's oridinal suffix. For example the st in 91st, the rd in 23rd, and the th in 26th, etc.`,
|
||||
defaultMessage: `
|
||||
{indicatorValue, selectordinal,
|
||||
one {#st}
|
||||
two {#nd}
|
||||
=3 {#rd}
|
||||
other {#th}
|
||||
}
|
||||
`,
|
||||
},
|
||||
{
|
||||
indicatorValue: displayStat,
|
||||
},
|
||||
);
|
||||
|
||||
return isPercent ?
|
||||
<span>
|
||||
{intl.formatNumber(
|
||||
displayStat,
|
||||
{
|
||||
style: 'unit',
|
||||
unit: 'percent',
|
||||
unitDisplay: 'short',
|
||||
},
|
||||
)}
|
||||
</span> : superscriptOrdinal(i18nOrdinalSuffix);
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -175,8 +199,7 @@ const Indicator = ({indicator}:IIndicator) => {
|
|||
|
||||
{/* Indicator value */}
|
||||
<div className={styles.indicatorValue}>
|
||||
{displayStat}
|
||||
<DisplayStatUnit indicator={indicator} displayStat={displayStat}/>
|
||||
<IndicatorValue isPercent={indicator.isPercent} displayStat={displayStat}/>
|
||||
</div>
|
||||
|
||||
{/* Indicator icon - up arrow, down arrow, or unavailable */}
|
||||
|
|
|
@ -16,9 +16,8 @@ exports[`rendering of the Indicator checks if component renders 1`] = `
|
|||
<div>
|
||||
<div>
|
||||
<div>
|
||||
9700
|
||||
<span>
|
||||
%
|
||||
97%
|
||||
</span>
|
||||
</div>
|
||||
<div>
|
||||
|
@ -30,10 +29,11 @@ exports[`rendering of the Indicator checks if component renders 1`] = `
|
|||
</div>
|
||||
<div>
|
||||
<div>
|
||||
above 20
|
||||
</div>
|
||||
<div>
|
||||
percent
|
||||
above
|
||||
<span>
|
||||
20%
|
||||
</span>
|
||||
percent
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -81,10 +81,13 @@ exports[`test rendering of Indicator value icons renders the up arrow when value
|
|||
exports[`test rendering of Indicator value sub-text renders the "above 90 percentile" 1`] = `
|
||||
<DocumentFragment>
|
||||
<div>
|
||||
above 90th
|
||||
</div>
|
||||
<div>
|
||||
percentile
|
||||
above 90
|
||||
<sup
|
||||
style="top: -0.2em;"
|
||||
>
|
||||
th
|
||||
</sup>
|
||||
percentile
|
||||
</div>
|
||||
</DocumentFragment>
|
||||
`;
|
||||
|
@ -92,10 +95,13 @@ exports[`test rendering of Indicator value sub-text renders the "above 90 percen
|
|||
exports[`test rendering of Indicator value sub-text renders the "below 90 percentile" 1`] = `
|
||||
<DocumentFragment>
|
||||
<div>
|
||||
below 90th
|
||||
</div>
|
||||
<div>
|
||||
percentile
|
||||
below 90
|
||||
<sup
|
||||
style="top: -0.2em;"
|
||||
>
|
||||
th
|
||||
</sup>
|
||||
percentile
|
||||
</div>
|
||||
</DocumentFragment>
|
||||
`;
|
||||
|
@ -113,17 +119,18 @@ exports[`test that the unit suffix renders correctly renders correctly when the
|
|||
exports[`test that the unit suffix renders correctly renders correctly when the value is a percent 1`] = `
|
||||
<DocumentFragment>
|
||||
<span>
|
||||
%
|
||||
90%
|
||||
</span>
|
||||
</DocumentFragment>
|
||||
`;
|
||||
|
||||
exports[`test that the unit suffix renders correctly renders correctly when the value is a percentile 1`] = `
|
||||
<DocumentFragment>
|
||||
<sup>
|
||||
<span>
|
||||
th
|
||||
</span>
|
||||
90
|
||||
<sup
|
||||
style="top: -0.2em;"
|
||||
>
|
||||
th
|
||||
</sup>
|
||||
</DocumentFragment>
|
||||
`;
|
||||
|
|
|
@ -3,10 +3,22 @@ import {render} from '@testing-library/react';
|
|||
import {LocalizedComponent} from '../../test/testHelpers';
|
||||
import Language from './Language';
|
||||
|
||||
describe('rendering of the Language', () => {
|
||||
describe('rendering of the Language component on mobile', () => {
|
||||
const {asFragment} = render(
|
||||
<LocalizedComponent>
|
||||
<Language />
|
||||
<Language isDesktop={false}/>
|
||||
</LocalizedComponent>,
|
||||
);
|
||||
|
||||
it('checks if component renders', () => {
|
||||
expect(asFragment()).toMatchSnapshot();
|
||||
});
|
||||
});
|
||||
|
||||
describe('rendering of the Language component on desktop', () => {
|
||||
const {asFragment} = render(
|
||||
<LocalizedComponent>
|
||||
<Language isDesktop={true}/>
|
||||
</LocalizedComponent>,
|
||||
);
|
||||
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
||||
|
||||
exports[`rendering of the Language checks if component renders 1`] = `<DocumentFragment />`;
|
||||
exports[`rendering of the Language component on desktop checks if component renders 1`] = `<DocumentFragment />`;
|
||||
|
||||
exports[`rendering of the Language component on mobile checks if component renders 1`] = `<DocumentFragment />`;
|
||||
|
|
|
@ -1,5 +1,21 @@
|
|||
# How to i18n copy for J40
|
||||
|
||||
1. Note that description fields can not have line feed or carriage returns or they will render a /n in the en.json file.
|
||||
2. Use bold, italic function in common.tsx
|
||||
3. Use <FormattedNumber> and <FormattedDate> for these data types.
|
||||
We are using the following two libraries to achieve internationalization (i18n):
|
||||
|
||||
- react-intl
|
||||
- gatsby-plugin-intl
|
||||
|
||||
Some common functions used by these libraries are:
|
||||
|
||||
```
|
||||
import {defineMessages} from 'react-intl';
|
||||
import {FormattedDate, FormattedMessage, FormattedNumber} from 'gatsby-plugin-intl';
|
||||
```
|
||||
|
||||
When we are using a place text function with no links, or rich-text formatting, it is suggested to use `defineMessages`.
|
||||
|
||||
When we do have to apply rich-text formatting, we can achieve this with `FormattedDate`.
|
||||
|
||||
When havin to add Dates or Numbers, we can can use `FormattedDate` and `FormattedNumber` respectively.
|
||||
|
||||
More examples can be found [here](https://github.com/formatjs/formatjs/blob/main/packages/react-intl/examples/Messages.tsx)
|
|
@ -195,7 +195,7 @@ export const FOOTER = defineMessages({
|
|||
description: 'Navigate to the about page. This is Footer github link text',
|
||||
},
|
||||
GITHUB_LINK: {
|
||||
id: 'common.pages.footer.findcontact.link',
|
||||
id: 'common.pages.footer.gatsby.link',
|
||||
defaultMessage: 'https://github.com/usds/justice40-tool',
|
||||
description: 'Navigate to the about page. This is Footer find contact link text',
|
||||
},
|
||||
|
|
|
@ -89,7 +89,7 @@ export const CENSUS_TRACT_FEEDBACK = {
|
|||
};
|
||||
|
||||
export const CONTACT_VIA_EMAIL = {
|
||||
ID: 'contact.general',
|
||||
ID: 'contact.page.general',
|
||||
DESCRIPTION: 'Contact page body text',
|
||||
DEFAULT_MESSAGE: `For general feedback, email {general_email_address}.`,
|
||||
};
|
||||
|
|
|
@ -21,9 +21,9 @@ export const PAGE_INTRO = defineMessages({
|
|||
description: 'Navigate to the the Downloads page, this will be the page heading2 text',
|
||||
},
|
||||
PAGE_DESCRIPTION1: {
|
||||
id: 'downloads.page.heading1.text',
|
||||
id: 'downloads.page.description1.text',
|
||||
defaultMessage: 'The dataset used in the tool, along with a data dictionary and information about how to use the list of communities (.pdf) are available in the following file formats:',
|
||||
description: 'Navigate to the the Downloads page, this will be the page heading1 text',
|
||||
description: 'Navigate to the the Downloads page, this will be the page description1 text',
|
||||
},
|
||||
});
|
||||
|
||||
|
|
|
@ -302,19 +302,19 @@ export const COMMUNITY = {
|
|||
|
||||
export const numberOfCategoriesExceeded = (categoryCount:number) => <FormattedMessage
|
||||
id={'explore.tool.page.side.panel.num.categories.exceeded'}
|
||||
defaultMessage={`Disadvantaged in {numberOfDisCategories} categories`}
|
||||
defaultMessage={`Disadvantaged in {numberOfDisCategories, plural, one {# category} other {# categories}}`}
|
||||
description={`Navigate to the explore the tool page. When the map is in view, click on the map. The side panel will show how many categories are exceeded`}
|
||||
values={{
|
||||
numberOfDisCategories: <FormattedNumber value={categoryCount} />,
|
||||
numberOfDisCategories: categoryCount,
|
||||
}}
|
||||
/>;
|
||||
|
||||
export const numberOfThresholdsExceeded = (thresholds:number) => <FormattedMessage
|
||||
id={'explore.tool.page.side.panel.num.thresholds.exceeded'}
|
||||
defaultMessage={`At or above {numberOfThresholdExceed} thresholds`}
|
||||
defaultMessage={`At or above {numberOfThresholdExceed, plural, one {# threshold} other {# thresholds}}`}
|
||||
description={`Navigate to the explore the tool page. When the map is in view, click on the map. The side panel will show how many thresholds are exceeded`}
|
||||
values={{
|
||||
numberOfThresholdExceed: <FormattedNumber value={thresholds} />,
|
||||
numberOfThresholdExceed: thresholds,
|
||||
}}
|
||||
/>;
|
||||
|
||||
|
@ -524,44 +524,44 @@ export const SIDE_PANEL_INDICATORS = defineMessages({
|
|||
|
||||
export const SIDE_PANEL_VALUES = {
|
||||
ABOVE: <FormattedMessage
|
||||
id={'explore.page.side.panel.indicator.value.subtext.above'}
|
||||
id={'explore.tool.page.side.panel.indicator.value.subtext.above'}
|
||||
description={'indicating above threshold'}
|
||||
defaultMessage={`above `}
|
||||
/>,
|
||||
BELOW: <FormattedMessage
|
||||
id={'explore.page.side.panel.indicator.value.subtext.below'}
|
||||
id={'explore.tool.page.side.panel.indicator.value.subtext.below'}
|
||||
description={'indicating below threshold'}
|
||||
defaultMessage={`below `}
|
||||
/>,
|
||||
PERCENT: <FormattedMessage
|
||||
id={'explore.page.side.panel.indicator.value.subtext.percent'}
|
||||
id={'explore.tool.page.side.panel.indicator.value.subtext.percent'}
|
||||
description={'indicating percent units'}
|
||||
defaultMessage={`percent`}
|
||||
/>,
|
||||
PERCENTILE: <FormattedMessage
|
||||
id={'explore.page.side.panel.indicator.value.subtext.percentile'}
|
||||
id={'explore.tool.page.side.panel.indicator.value.subtext.percentile'}
|
||||
description={'indicating percentile units'}
|
||||
defaultMessage={`percentile`}
|
||||
/>,
|
||||
IMG_ALT_TEXT: defineMessages({
|
||||
ARROW_UP: {
|
||||
id: 'explore.page.side.panel.indicator.value.arrow.up.alt.text',
|
||||
id: 'explore.tool.page.side.panel.indicator.value.arrow.up.alt.text',
|
||||
description: 'image alt text for the up arrow',
|
||||
defaultMessage: `an icon for the up arrow`,
|
||||
},
|
||||
ARROW_DOWN: {
|
||||
id: 'explore.page.side.panel.indicator.value.arrow.down.alt.text',
|
||||
id: 'explore.tool.page.side.panel.indicator.value.arrow.down.alt.text',
|
||||
description: 'image alt text for the down arrow',
|
||||
defaultMessage: `an icon for the down arrow`,
|
||||
},
|
||||
UNAVAILABLE: {
|
||||
id: 'explore.page.side.panel.indicator.value.unavailable.alt.text',
|
||||
id: 'explore.tool.page.side.panel.indicator.value.unavailable.alt.text',
|
||||
description: 'image alt text for unavailable icon',
|
||||
defaultMessage: `an icon to represent data is unavailable`,
|
||||
},
|
||||
}),
|
||||
UNAVAILBLE_MSG: <FormattedMessage
|
||||
id={'explore.page.side.panel.indicator.value.subtext.unavailable'}
|
||||
id={'explore.tool.page.side.panel.indicator.value.subtext.unavailable'}
|
||||
description={'subtext for indicator when data is N/A'}
|
||||
defaultMessage={`data is not available`}
|
||||
/>,
|
||||
|
@ -733,27 +733,27 @@ export const SIDE_PANEL_INDICATOR_DESCRIPTION = defineMessages({
|
|||
|
||||
export const SIDE_PANEL_SPACERS = {
|
||||
EXCEED_ONE_OR_MORE: <FormattedMessage
|
||||
id={'explore.page.side.panel.at.or.above.at.least.one'}
|
||||
id={'explore.tool.page.side.panel.at.or.above.at.least.one'}
|
||||
defaultMessage={`At or above at least one threshold?`}
|
||||
description={`Navigate to the explore the tool page. When the map is in view, click on the map. Click on a category to expand. This is the first question text around thresholds.`}
|
||||
/>,
|
||||
EXCEED_BOTH_SOCIO: <FormattedMessage
|
||||
id={'explore.page.side.panel.at.or.above.both.thresholds'}
|
||||
id={'explore.tool.page.side.panel.at.or.above.both.thresholds'}
|
||||
defaultMessage={`At or above both associated thresholds?`}
|
||||
description={`Navigate to the explore the tool page. When the map is in view, click on the map. Click on a category to expand. This is the second question text around thresholds.`}
|
||||
/>,
|
||||
YES: <FormattedMessage
|
||||
id={'explore.page.side.panel.exceed.burden.answer.yes'}
|
||||
id={'explore.tool.page.side.panel.exceed.burden.answer.yes'}
|
||||
defaultMessage={`Yes`}
|
||||
description={'Navigate to the explore the tool page. When the map is in view, click on the map. This will display YES if the census tract is disadvantaged'}
|
||||
/>,
|
||||
NO: <FormattedMessage
|
||||
id={'explore.page.side.panel.exceed.burden.answer.no'}
|
||||
id={'explore.tool.page.side.panel.exceed.burden.answer.no'}
|
||||
defaultMessage={`No`}
|
||||
description={'Navigate to the explore the tool page. When the map is in view, click on the map. This will display NO if the census tract is disadvantaged'}
|
||||
/>,
|
||||
AND: <FormattedMessage
|
||||
id={'explore.page.side.panel.spacer.and'}
|
||||
id={'explore.tool.page.side.panel.spacer.and'}
|
||||
defaultMessage={`AND`}
|
||||
description={'Navigate to the explore the tool page. When the map is in view, click on the map. Click on a category to expand. This is the AND spacer around thresholds.'}
|
||||
/>,
|
||||
|
|
|
@ -284,7 +284,7 @@ export const EVENTS = [
|
|||
EXPIRED_IMG: mar31Exp,
|
||||
FIELDS: defineMessages({
|
||||
INFO: {
|
||||
id: 'public.eng.page.whejac.meeting.day.1.info',
|
||||
id: 'public.eng.page.whejac.meeting.day.2.info',
|
||||
defaultMessage: `March 31th (3:00 - 7:30 PM EST)`,
|
||||
description: 'public engagement page event WHEJAC',
|
||||
},
|
||||
|
|
|
@ -1,43 +1,4 @@
|
|||
# Translating content to Spanish
|
||||
|
||||
## Keys without curly brackets
|
||||
Navigate to the `es.json` file. This JSON file will have a key and a value in English. The translation team will replace all English values with Spanish values.
|
||||
|
||||
```json
|
||||
{
|
||||
"about.page.sub.header.1.text.1" : "On January 27, 2021, President Biden directed the Council on Environmental Quality (CEQ) to create a climate and economic justice screening tool. The purpose of the tool is to help Federal agencies identify disadvantaged communities and provide socioeconomic, environmental, and climate information and data to inform decisions that may affect these communities. The tool identifies disadvantaged communities as communities of focus through publicly available, nationally consistent, high-quality data.",
|
||||
}
|
||||
```
|
||||
|
||||
## Keys with curly brackets
|
||||
|
||||
There are some keys with curly brackets, for example, `es.json`:
|
||||
|
||||
```json
|
||||
{
|
||||
"download.draft.ptag.1" : "{downloadDraft} of communities of focus and datasets used. Last updated: {dateUpdated}.",
|
||||
}
|
||||
```
|
||||
|
||||
In this case, this first step is find out what the English sentence is:
|
||||
|
||||

|
||||
|
||||
The reason the `{downloadDraft}` and `{dateUpdated}` are in curly brackets is because something special happens with that text. In the former it's a link in the latter it's a variable that being used in multiple places.
|
||||
|
||||
Let's assume that this sentence translates to Spanish as
|
||||
|
||||
_Descargue la lista preliminar de comunidades de interés y conjuntos de datos utilizados. Última actualización: 01/10/21._
|
||||
|
||||
And let's say we want `Descargue la lista preliminar` to be a link. Then, we would place the following as the translated content:
|
||||
|
||||
```json
|
||||
{
|
||||
"download.draft.ptag.1_english" : "{downloadDraft} of communities of focus and datasets used. Last updated: {dateUpdated}.",
|
||||
"download.draft.ptag.1" : "`{downloadDraftEs} de comunidades de interés y conjuntos de datos utilizados. Última actualización: {dateUpdatedEs}.`",
|
||||
}
|
||||
```
|
||||
|
||||
Where `downloadDraftEs` = _Descargue la lista preliminar_ and `dateUpdatedEs`= _01/10/21_
|
||||
|
||||
TBD: How should these curly bracket variables be communicated to the dev team?
|
||||
The copy folder contains on the content that could be translated into other languages. Please see the README in the
|
||||
folder for more information.
|
|
@ -132,13 +132,17 @@
|
|||
"description": "Navigate to the about page. This is Footer find contact link text"
|
||||
},
|
||||
"common.pages.footer.findcontact.link": {
|
||||
"defaultMessage": "https://github.com/usds/justice40-tool",
|
||||
"defaultMessage": "https://www.usa.gov/",
|
||||
"description": "Navigate to the about page. This is Footer find contact link text"
|
||||
},
|
||||
"common.pages.footer.foia.text": {
|
||||
"defaultMessage": "Freedom of Information Act (FOIA)",
|
||||
"description": "Navigate to the about page. This is Footer FOIA link text"
|
||||
},
|
||||
"common.pages.footer.gatsby.link": {
|
||||
"defaultMessage": "https://github.com/usds/justice40-tool",
|
||||
"description": "Navigate to the about page. This is Footer find contact link text"
|
||||
},
|
||||
"common.pages.footer.github.link.text": {
|
||||
"defaultMessage": "Check out the code on GitHub",
|
||||
"description": "Navigate to the about page. This is Footer github link text"
|
||||
|
@ -262,12 +266,16 @@
|
|||
"defaultMessage": "<link1>CSV file </link1> (.csv {csvFileSize} unzipped)",
|
||||
"description": "On the downloads page, the description of the csv link"
|
||||
},
|
||||
"downloads.page.description1.text": {
|
||||
"defaultMessage": "The dataset used in the tool, along with a data dictionary and information about how to use the list of communities (.pdf) are available in the following file formats:",
|
||||
"description": "Navigate to the the Downloads page, this will be the page description1 text"
|
||||
},
|
||||
"downloads.page.excel.link": {
|
||||
"defaultMessage": "<link1>Excel file</link1> (.xlxs {excelFileSize} unzipped)",
|
||||
"description": "On the downloads page, the description of the excel link"
|
||||
},
|
||||
"downloads.page.heading1.text": {
|
||||
"defaultMessage": "The dataset used in the tool, along with a data dictionary and information about how to use the list of communities (.pdf) are available in the following file formats:",
|
||||
"defaultMessage": "Downloads",
|
||||
"description": "Navigate to the the Downloads page, this will be the page heading1 text"
|
||||
},
|
||||
"downloads.page.heading2.text": {
|
||||
|
@ -282,58 +290,6 @@
|
|||
"defaultMessage": "Downloads",
|
||||
"description": "Navigate to the the Downloads page, this will be the page title text"
|
||||
},
|
||||
"explore.page.side.panel.at.or.above.at.least.one": {
|
||||
"defaultMessage": "At or above at least one threshold?",
|
||||
"description": "Navigate to the explore the tool page. When the map is in view, click on the map. Click on a category to expand. This is the first question text around thresholds."
|
||||
},
|
||||
"explore.page.side.panel.at.or.above.both.thresholds": {
|
||||
"defaultMessage": "At or above both associated thresholds?",
|
||||
"description": "Navigate to the explore the tool page. When the map is in view, click on the map. Click on a category to expand. This is the second question text around thresholds."
|
||||
},
|
||||
"explore.page.side.panel.exceed.burden.answer.no": {
|
||||
"defaultMessage": "No",
|
||||
"description": "Navigate to the explore the tool page. When the map is in view, click on the map. This will display NO if the census tract is disadvantaged"
|
||||
},
|
||||
"explore.page.side.panel.exceed.burden.answer.yes": {
|
||||
"defaultMessage": "Yes",
|
||||
"description": "Navigate to the explore the tool page. When the map is in view, click on the map. This will display YES if the census tract is disadvantaged"
|
||||
},
|
||||
"explore.page.side.panel.indicator.value.arrow.down.alt.text": {
|
||||
"defaultMessage": "an icon for the down arrow",
|
||||
"description": "image alt text for the down arrow"
|
||||
},
|
||||
"explore.page.side.panel.indicator.value.arrow.up.alt.text": {
|
||||
"defaultMessage": "an icon for the up arrow",
|
||||
"description": "image alt text for the up arrow"
|
||||
},
|
||||
"explore.page.side.panel.indicator.value.subtext.above": {
|
||||
"defaultMessage": "above",
|
||||
"description": "indicating above threshold"
|
||||
},
|
||||
"explore.page.side.panel.indicator.value.subtext.below": {
|
||||
"defaultMessage": "below",
|
||||
"description": "indicating below threshold"
|
||||
},
|
||||
"explore.page.side.panel.indicator.value.subtext.percent": {
|
||||
"defaultMessage": "percent",
|
||||
"description": "indicating percent units"
|
||||
},
|
||||
"explore.page.side.panel.indicator.value.subtext.percentile": {
|
||||
"defaultMessage": "percentile",
|
||||
"description": "indicating percentile units"
|
||||
},
|
||||
"explore.page.side.panel.indicator.value.subtext.unavailable": {
|
||||
"defaultMessage": "data is not available",
|
||||
"description": "subtext for indicator when data is N/A"
|
||||
},
|
||||
"explore.page.side.panel.indicator.value.unavailable.alt.text": {
|
||||
"defaultMessage": "an icon to represent data is unavailable",
|
||||
"description": "image alt text for unavailable icon"
|
||||
},
|
||||
"explore.page.side.panel.spacer.and": {
|
||||
"defaultMessage": "AND",
|
||||
"description": "Navigate to the explore the tool page. When the map is in view, click on the map. Click on a category to expand. This is the AND spacer around thresholds."
|
||||
},
|
||||
"explore.tool.page.description.text": {
|
||||
"defaultMessage": "Use the map to see communities that are identified as disadvantaged. The map uses publicly-available, nationally-consistent datasets. Learn more about the methodology and datasets that were used to identify disavantaged communities in the current version of the tool on the <link1>Methodology & data</link1> page.",
|
||||
"description": "On the explore the tool page, the description of the page"
|
||||
|
@ -426,6 +382,14 @@
|
|||
"defaultMessage": "Zoom in to the state or regional level to see prioritized communities on the map.",
|
||||
"description": "On the explore the tool page, on the map, the zoom warning on map"
|
||||
},
|
||||
"explore.tool.page.side.panel.at.or.above.at.least.one": {
|
||||
"defaultMessage": "At or above at least one threshold?",
|
||||
"description": "Navigate to the explore the tool page. When the map is in view, click on the map. Click on a category to expand. This is the first question text around thresholds."
|
||||
},
|
||||
"explore.tool.page.side.panel.at.or.above.both.thresholds": {
|
||||
"defaultMessage": "At or above both associated thresholds?",
|
||||
"description": "Navigate to the explore the tool page. When the map is in view, click on the map. Click on a category to expand. This is the second question text around thresholds."
|
||||
},
|
||||
"explore.tool.page.side.panel.category.header.indicator": {
|
||||
"defaultMessage": "Indicator",
|
||||
"description": "Navigate to the explore the tool page. When the map is in view, click on the map. The side panel will show header for each category\n"
|
||||
|
@ -438,6 +402,14 @@
|
|||
"defaultMessage": "YES",
|
||||
"description": "Navigate to the explore the tool page. When the map is in view, click on the map. The side panel will show the communities the score currently is focused on"
|
||||
},
|
||||
"explore.tool.page.side.panel.exceed.burden.answer.no": {
|
||||
"defaultMessage": "No",
|
||||
"description": "Navigate to the explore the tool page. When the map is in view, click on the map. This will display NO if the census tract is disadvantaged"
|
||||
},
|
||||
"explore.tool.page.side.panel.exceed.burden.answer.yes": {
|
||||
"defaultMessage": "Yes",
|
||||
"description": "Navigate to the explore the tool page. When the map is in view, click on the map. This will display YES if the census tract is disadvantaged"
|
||||
},
|
||||
"explore.tool.page.side.panel.geographicInfo.censusBlockGroup": {
|
||||
"defaultMessage": "Census tract:",
|
||||
"description": "Navigate to the explore the tool page. When the map is in view, click on the map. The side panel will show the census tract id number of the feature selected"
|
||||
|
@ -626,6 +598,10 @@
|
|||
"defaultMessage": "Median home value",
|
||||
"description": "Navigate to the explore the tool page. When the map is in view, click on the map. The side panel will show Housing cost burden"
|
||||
},
|
||||
"explore.tool.page.side.panel.indicator.percentile.value.ordinal.suffix": {
|
||||
"defaultMessage": "{indicatorValue, selectordinal, one {#st} two {#nd} =3 {#rd} other {#th} }",
|
||||
"description": "Navigate to the explore the tool page. Click on the map. The side panel will show categories. Open a category. This will define the indicator value's oridinal suffix. For example the st in 91st, the rd in 23rd, and the th in 26th, etc."
|
||||
},
|
||||
"explore.tool.page.side.panel.indicator.pm25": {
|
||||
"defaultMessage": "PM2.5 in the air",
|
||||
"description": "Navigate to the explore the tool page. When the map is in view, click on the map. The side panel will show PM2.5 in the air"
|
||||
|
@ -686,6 +662,38 @@
|
|||
"defaultMessage": "Unemployment",
|
||||
"description": "Navigate to the explore the tool page. When the map is in view, click on the map. The side panel will show Unemployment"
|
||||
},
|
||||
"explore.tool.page.side.panel.indicator.value.arrow.down.alt.text": {
|
||||
"defaultMessage": "an icon for the down arrow",
|
||||
"description": "image alt text for the down arrow"
|
||||
},
|
||||
"explore.tool.page.side.panel.indicator.value.arrow.up.alt.text": {
|
||||
"defaultMessage": "an icon for the up arrow",
|
||||
"description": "image alt text for the up arrow"
|
||||
},
|
||||
"explore.tool.page.side.panel.indicator.value.subtext.above": {
|
||||
"defaultMessage": "above",
|
||||
"description": "indicating above threshold"
|
||||
},
|
||||
"explore.tool.page.side.panel.indicator.value.subtext.below": {
|
||||
"defaultMessage": "below",
|
||||
"description": "indicating below threshold"
|
||||
},
|
||||
"explore.tool.page.side.panel.indicator.value.subtext.percent": {
|
||||
"defaultMessage": "percent",
|
||||
"description": "indicating percent units"
|
||||
},
|
||||
"explore.tool.page.side.panel.indicator.value.subtext.percentile": {
|
||||
"defaultMessage": "percentile",
|
||||
"description": "indicating percentile units"
|
||||
},
|
||||
"explore.tool.page.side.panel.indicator.value.subtext.unavailable": {
|
||||
"defaultMessage": "data is not available",
|
||||
"description": "subtext for indicator when data is N/A"
|
||||
},
|
||||
"explore.tool.page.side.panel.indicator.value.unavailable.alt.text": {
|
||||
"defaultMessage": "an icon to represent data is unavailable",
|
||||
"description": "image alt text for unavailable icon"
|
||||
},
|
||||
"explore.tool.page.side.panel.indicator.wasteWater": {
|
||||
"defaultMessage": "Wastewater discharge",
|
||||
"description": "Navigate to the explore the tool page. When the map is in view, click on the map. The side panel will show Wastewater discharge"
|
||||
|
@ -739,11 +747,11 @@
|
|||
"description": "Navigate to the explore the tool page. When the map is in view, click on the map. The side panel will show the communities the score currently is not focused on"
|
||||
},
|
||||
"explore.tool.page.side.panel.num.categories.exceeded": {
|
||||
"defaultMessage": "Disadvantaged in {numberOfDisCategories} categories",
|
||||
"defaultMessage": "Disadvantaged in {numberOfDisCategories, plural, one {# category} other {# categories}}",
|
||||
"description": "Navigate to the explore the tool page. When the map is in view, click on the map. The side panel will show how many categories are exceeded"
|
||||
},
|
||||
"explore.tool.page.side.panel.num.thresholds.exceeded": {
|
||||
"defaultMessage": "At or above {numberOfThresholdExceed} thresholds",
|
||||
"defaultMessage": "At or above {numberOfThresholdExceed, plural, one {# threshold} other {# thresholds}}",
|
||||
"description": "Navigate to the explore the tool page. When the map is in view, click on the map. The side panel will show how many thresholds are exceeded"
|
||||
},
|
||||
"explore.tool.page.side.panel.send.feedback.alt.img": {
|
||||
|
@ -758,6 +766,10 @@
|
|||
"defaultMessage": "Send feedback",
|
||||
"description": "Navigate to the explore the tool page. When the map is in view, click on the map. The side panel will show link to send feedback"
|
||||
},
|
||||
"explore.tool.page.side.panel.spacer.and": {
|
||||
"defaultMessage": "AND",
|
||||
"description": "Navigate to the explore the tool page. When the map is in view, click on the map. Click on a category to expand. This is the AND spacer around thresholds."
|
||||
},
|
||||
"explore.tool.page.side.panel.version.title": {
|
||||
"defaultMessage": "Methodology version {version}",
|
||||
"description": "Navigate to the explore the tool page. When the map is in view, click on the map. The side panel will show the methodology version number"
|
||||
|
@ -1435,6 +1447,10 @@
|
|||
"description": "Navigate to the the public engagement page, there will be box that allows users to watch previously recorded videos. This is that box title text."
|
||||
},
|
||||
"public.eng.page.whejac.meeting.day.1.info": {
|
||||
"defaultMessage": "March 30th (3:00 - 7:00 PM EST)",
|
||||
"description": "public engagement page event WHEJAC"
|
||||
},
|
||||
"public.eng.page.whejac.meeting.day.2.info": {
|
||||
"defaultMessage": "March 31th (3:00 - 7:30 PM EST)",
|
||||
"description": "public engagement page event WHEJAC"
|
||||
},
|
||||
|
|
File diff suppressed because one or more lines are too long
146
client/src/intl/es_old.json
Normal file
146
client/src/intl/es_old.json
Normal file
|
@ -0,0 +1,146 @@
|
|||
{
|
||||
"about.page.sub.header.1.text.1": "El 27 de enero de 2021, el presidente Biden impartió instrucciones al Consejo sobre la Calidad del Medio Ambiente (CEQ, por sus siglas en inglés) de crear una herramienta para la evaluación de la justicia climática y económica. El objeto de la herramienta es ayudar a los organismos federales a identificar comunidades desfavorecidas y brindar información y datos socioeconómicos, ambientales y climáticos para fundamentar las decisiones que inciden en estas comunidades. La herramienta identifica a comunidades desfavorecidas como comunidades focales mediante datos públicos, de alta calidad y congruentes a nivel nacional.",
|
||||
"about.page.sub.header.1.text.2": "La versión actual de la herramienta se encuentra en formato beta público y se actualizará conforme los comentarios del público.",
|
||||
"about.page.sub.header.2.text.1": "La herramienta brindará información importante para la Iniciativa Justice40. La meta de la Iniciativa Justice40 es brindar el 40% de los beneficios generales de ciertos programas federales en siete ámbitos clave a comunidades desfavorecidas. Estos siete ámbitos clave son: cambio climático, energía no contaminante y eficiencia energética, tráfico no contaminante, viviendas asequibles y sostenibles, capacitación y formación de la fuerza laboral, remediación y reducción de contaminación legada y creación de infraestructura hídrica esencial no contaminante.",
|
||||
"about.page.sub.header.2.text.2": "Lea más sobre la Iniciativa Justice40 en el documento del presidente Biden",
|
||||
"about.page.title.text": "Información básica",
|
||||
"areaDetail.categorization.community.of.focus": "Comunidad focal",
|
||||
"areaDetail.categorization.not.community.of.focus": "No es una comunidad focal",
|
||||
"areaDetail.geographicInfo.censusBlockGroup": "Grupo de bloques censales:",
|
||||
"areaDetail.geographicInfo.county": "Condado:",
|
||||
"areaDetail.geographicInfo.population": "Población:",
|
||||
"areaDetail.geographicInfo.state": "Estado:",
|
||||
"areaDetail.indicator.areaMedianIncome": "Renta mediana del área",
|
||||
"areaDetail.indicator.asthma": "Asma",
|
||||
"areaDetail.indicator.description.area_median_income": "La renta mediana del grupo de bloques censales calculada como porcentaje de la renta mediana del área metropolitana o del estado.",
|
||||
"areaDetail.indicator.description.asthma": "Personas que respondan “sí” a ambas preguntas: “¿Alguna vez le dijo un médico, enfermero u otro profesional sanitario que tiene asma?” y “¿Aún tiene asma?\"",
|
||||
"areaDetail.indicator.description.diabetes": "Personas de 18 años de edad y más que informan que un médico, enfermero u otro profesional sanitario les dijo que tienen diabetes y no es diabetes gestacional",
|
||||
"areaDetail.indicator.description.dieselPartMatter": "Combinación de partículas que componen el gas de motor diésel en la atmósfera.",
|
||||
"areaDetail.indicator.description.education": "Porcentaje de personas de 25 años o más que no obtuvieron un diploma de educación secundaria.",
|
||||
"areaDetail.indicator.description.energyBurden": "Costo promedio anual de la energía ($) dividido por los ingresos familiares",
|
||||
"areaDetail.indicator.description.femaRisk": "Puntuación de pérdida anual prevista, que es el promedio de pérdida económica en dólares a raíz de riesgos naturales cada año.",
|
||||
"areaDetail.indicator.description.heartDisease": "Personas de 18 años de edad y más que informan que alguna vez un médico, enfermero u otro profesional sanitario les dijo que tenían angina de pecho o cardiopatía coronaria",
|
||||
"areaDetail.indicator.description.houseBurden": "Hogares de ingresos bajos que gastan más del 30% de sus ingresos en costos de vivienda",
|
||||
"areaDetail.indicator.description.leadPaint": "Unidades de vivienda construidas antes de 1960, utilizadas como un indicador de exposición potencial a plomo en la pintura de los hogares",
|
||||
"areaDetail.indicator.description.lifeExpect": "Años previstos de expectativa de vida",
|
||||
"areaDetail.indicator.description.pm25": "Partículas finas inhalables, con diámetros por lo general de 2,5 micrómetros y menos",
|
||||
"areaDetail.indicator.description.poverty": "Porcentaje de la población de un grupo de bloques en hogares en los que los ingresos familiares se encuentran al 100% o menos del nivel de pobreza federal",
|
||||
"areaDetail.indicator.description.trafficVolume": "Número de vehículos (tránsito diario anual promedio) en carreteras principales dentro de los 500 metros, dividido por distancia en metros",
|
||||
"areaDetail.indicator.description.wasteWater": "Concentraciones tóxicas en segmentos de corrientes dentro de los 500 metros divididas por distancia en kilómetros",
|
||||
"areaDetail.indicator.diabetes": "Diabetes",
|
||||
"areaDetail.indicator.dieselPartMatter": "Partículas de humo diésel ",
|
||||
"areaDetail.indicator.education": "Educación, menos de la escuela secundaria",
|
||||
"areaDetail.indicator.energyBurden": "Carga energética",
|
||||
"areaDetail.indicator.femaRisk": "Índice de riesgos de FEMA",
|
||||
"areaDetail.indicator.heartDisease": "Cardiopatía",
|
||||
"areaDetail.indicator.houseBurden": "Carga del costo de la vivienda",
|
||||
"areaDetail.indicator.leadPaint": "Pintura con plomo",
|
||||
"areaDetail.indicator.lifeExpect": "Expectativa de vida",
|
||||
"areaDetail.indicator.pm25": "PM2.5",
|
||||
"areaDetail.indicator.poverty": "Pobreza",
|
||||
"areaDetail.indicator.trafficVolume": "Proximidad al tránsito y volumen",
|
||||
"areaDetail.indicator.wasteWater": "Descarga de aguas residuales",
|
||||
"areaDetail.indicators.indicatorColumnHeader": "Indicador",
|
||||
"areaDetail.indicators.percentileColumnHeader": "Percentil (0-100)",
|
||||
"banner.beta.info": "Es una versión preliminar inconclusa de la herramienta con conjuntos de datos limitados que se actualizarán en forma continua.",
|
||||
"banner.beta.title": "Este es un sitio beta.",
|
||||
"community.members.heading": "Miembros de la comunidad",
|
||||
"community.members.info": "Explore datos sobre comunidades focales en su zona, y colabore con el envío de comentarios sobre la herramienta.",
|
||||
"community.members.link": "Explore la herramienta",
|
||||
"contact.page.header.text": "Contact",
|
||||
"contact.page.sub.header.text": "Email us",
|
||||
"contact.page.title.text": "Contact",
|
||||
"datasetCard.dataDateRange": "Intervalo de fechas de los datos:",
|
||||
"datasetCard.dataResolution": "Resolución de los datos:",
|
||||
"datasetCard.dataSource": "Fuente de datos:",
|
||||
"datasetContainer.additional.heading": "Otros indicadores",
|
||||
"datasetContainer.additional.info": "Estos conjuntos de datos brindan más información sobre cada comunidad.",
|
||||
"datasetContainer.heading": "Conjuntos de datos utilizados en la metodología",
|
||||
"datasetContainer.info": "Los conjuntos de datos provienen de una variedad de fuentes y se seleccionaron según la pertinencia, disponibilidad, inmediatez y calidad. Los conjuntos de datos procuran identificar una gama de efectos sanitarios, ambientales y climáticos, entre otros efectos acumulados, en las comunidades.",
|
||||
"download.draft.ptag.1": "{downloadDraftEs} de comunidades focales y conjuntos de datos utilizados. Última actualización: {dateUpdatedEs}.",
|
||||
"download.draft.ptag.2": "El archivo ZIP contendrá un .xlsx, un .csv y un .pdf ({downloadFileSize}).",
|
||||
"downloadPacket.button.text": "Descargue paquete",
|
||||
"downloadPacket.header.text": "Lista preliminar de comunidades v{versionNumber} ({downloadFileSize})",
|
||||
"downloadPacket.info.last.updated": "Última actualización: {dateUpdatedEs}",
|
||||
"downloadPacket.info.text": "El paquete incluye una v{versionNumber} preliminar de la lista de comunidades focales (.csv y .xlsx) e información sobre cómo usar la lista (.pdf).",
|
||||
"exploreTool.heading.text": "Explore la herramienta",
|
||||
"exploreTool.page.description": "Amplíe el mapa para ver comunidades focales que pueden ayudar a los organismos federales a identificar comunidades desfavorecidas y para brindar información y datos socioeconómicos, ambientales y climáticos. Infórmese más sobre la metodología y los conjuntos de datos que se usaron para determinar estas comunidades focales en la página de {methodologyLinkEs}.",
|
||||
"exploreTool.title.text": "Explore la herramienta",
|
||||
"fab.survey.text": "¡Responde nuestra encuesta!",
|
||||
"federal.pm.heading": "Gerentes de programas federales",
|
||||
"federal.pm.info": "Descargue la lista preliminar de las comunidades focales de la herramienta de evaluación. Explore datos que podrían ser útiles para su programa y exprese comentarios sobre la herramienta.",
|
||||
"federal.pm.link": "Ir a datos y metodología",
|
||||
"footer.arialabel": "Navegación de pie de página",
|
||||
"footer.contactheader": "Contacto",
|
||||
"footer.findcontact": "Buscar un contacto en USA.gov.",
|
||||
"footer.findcontact.link": "https://www.usa.gov/espanol/",
|
||||
"footer.foia.text": "Ley de Libertad de Información (FOIA)",
|
||||
"footer.logo.title": "Consejo sobre la Calidad del Medio Ambiente",
|
||||
"footer.moreinfoheader": "Más información",
|
||||
"footer.privacy.link": "https://www.whitehouse.gov/es/privacidad/",
|
||||
"footer.privacy.text": "Política de privacidad",
|
||||
"footer.questionsheader": "¿Tiene una pregunta sobre los servicios del gobierno?",
|
||||
"footer.whitehouse.link": "https://www.whitehouse.gov/es/",
|
||||
"footer.whitehouse.text": "Whitehouse.gov",
|
||||
"footer.whitehouselogoalt": "Whitehouse logo",
|
||||
"getInvolved.title": "Participe",
|
||||
"header.about": "Sobre la aplicación",
|
||||
"header.contact": "Contacto",
|
||||
"header.explore": "Explore la herramienta",
|
||||
"header.methodology": "Datos y metodología",
|
||||
"header.title.line1": "Justicia climática y económica",
|
||||
"header.title.line2": "Herramienta de evaluación",
|
||||
"howToGetStarted.title": "Inicio",
|
||||
"index.heading.about.us": "Nuestra información",
|
||||
"index.heading.justice40": "La Iniciativa Justice40",
|
||||
"index.heading.screentool": "La herramienta de evaluación",
|
||||
"index.presidentalLinkLabel": "Orden ejecutiva 14008 sobre la Respuesta a la crisis climática en el país y en el extranjero.",
|
||||
"join.open.source.info": "El código de la herramienta de evaluación es código abierto, lo cual significa que está disponible para que el público lo vea y contribuya. Todos pueden ver y contribuir en GitHub.",
|
||||
"join.open.source.link": "Véala en GitHub",
|
||||
"join.opensource.heading": "Súmese a la comunidad de código abierto.",
|
||||
"legend.info.priority.label": "Comunidad focal preliminar",
|
||||
"legend.info.threshold.label": "Comunidad identificada como una en situación de desventaja que merece ser el foco de ciertas inversiones federales y de la Iniciativa Justice40.",
|
||||
"map.territoryFocus.alaska.long": "Alaska",
|
||||
"map.territoryFocus.alaska.short": "AK",
|
||||
"map.territoryFocus.focusOn": "Enfoque en territorios",
|
||||
"map.territoryFocus.hawaii.long": "Hawái",
|
||||
"map.territoryFocus.hawaii.short": "HI",
|
||||
"map.territoryFocus.lower48.long": "48 estados continentales",
|
||||
"map.territoryFocus.lower48.short": "48",
|
||||
"map.territoryFocus.puerto_rico.long": "Puerto Rico",
|
||||
"map.territoryFocus.puerto_rico.short": "PR",
|
||||
"map.zoom.warning": "Amplíe el nivel del estado o regional para ver las comunidades priorizadas en el mapa.",
|
||||
"mapIntro.censusBlockGroupDefinition": "Un grupo de bloques censales suele tener entre 600 y 3.000 personas. Se trata de la unidad geográfica más pequeña para la cual la Oficina del Censo de los EE. UU. publica una muestra de datos.",
|
||||
"mapIntro.didYouKnow": "¿Sabía que...?",
|
||||
"mapIntro.mapIntroHeader": "Amplíe y seleccione un grupo de bloques censales para ver los datos",
|
||||
"methodology.page.header.text": "Methodology",
|
||||
"methodology.page.paragraph.first": "The methodology for identifying communities of focus is currently in a draft, pre-decisional form that may change over time as more datasets become available.",
|
||||
"methodology.page.title.text": "Data and Methodology",
|
||||
"methodology.step.1.a.heading": "Percent of Area Median Income",
|
||||
"methodology.step.1.a.info.1": "If a census block group is in a metropolitan area, this value is the median income of the census block group calculated as a percent of the metropolitan area’s median income.",
|
||||
"methodology.step.1.a.info.2": "If a census block group is not in a metropolitan area, this value is the median income of the census block group calculated as a percent of the state’s median income.",
|
||||
"methodology.step.1.b.heading": "Percent of households below or at 100% of the federal poverty line",
|
||||
"methodology.step.1.c.heading": "The high school degree achievement rate for adults 25 years and older",
|
||||
"methodology.step.1.c.info": "The percent of individuals who are 25 or older who have received a high school degree.",
|
||||
"methodology.step.1.heading": "Gather datasets",
|
||||
"methodology.step.1.info": "The methodology includes the following inputs that are equally weighted.",
|
||||
"methodology.step.2.heading": "Determine communities of focus",
|
||||
"methodology.step.2.info": "Under the existing formula, a census block group will be considered a community of focus if:",
|
||||
"methodology.steps.2.b.info": "This is the percent of households in a state with a household income below or at 100% of the federal poverty line. This federal poverty line is calculated based on the composition of each household (e.g., based on household size), but it does not vary geographically.",
|
||||
"methodology.steps.2.formula": "(The median income is less than 80% of the area median income OR households living in poverty (at or below 100% of the federal poverty level) is greater than 20%) AND The high school degree achievement rate for adults 25 years and older is greater than 95%",
|
||||
"methodology.steps.description.1": "The methodology for identifying communities of focus is calculated at the census block group level. Census block geographical boundaries are determined by the U.S. Census Bureau once every ten years. This tool utilizes the census block boundaries from 2010.",
|
||||
"methodology.steps.description.2": "The following describes the process for identifying communities of focus.",
|
||||
"methodology.steps.heading": "Methodology",
|
||||
"pageNotFound.Guidance.text": "Intente crear una página en",
|
||||
"pageNotFound.apology.description.text": "No pudimos encontrar lo que busca.",
|
||||
"pageNotFound.apology.text": "Disculpe.",
|
||||
"pageNotFound.heading.text": "No se encontró la página",
|
||||
"pageNotFound.link.to.go.home.text": "Ir al inicio",
|
||||
"pageNotFound.title.text": "No se encontró la página",
|
||||
"send.feedback.heading": "Enviar comentarios",
|
||||
"send.feedback.info": "¿Tiene ideas sobre cómo mejorar esta herramienta para reflejar mejor las experiencias en el terreno de su comunidad?",
|
||||
"youCanHelpInfoText.heading": "Contribuya a mejorar la herramienta",
|
||||
"youCanHelpInfoText.list.item.1": "Si tiene información útil, nos encantaría que nos envíe un correo electrónico.",
|
||||
"youCanHelpInfoText.list.item.2": "Vea nuestra página de {dataMethEs} y envíenos comentarios.",
|
||||
"youCanHelpInfoText.list.item.3": "Encuentre su comunidad de interés y comparta sus comentarios."
|
||||
}
|
1198
client/src/intl/es_translated_final.json
Normal file
1198
client/src/intl/es_translated_final.json
Normal file
File diff suppressed because it is too large
Load diff
25
client/src/intl/removeNesting.js
Normal file
25
client/src/intl/removeNesting.js
Normal file
|
@ -0,0 +1,25 @@
|
|||
const fs = require('fs');
|
||||
const englishJson = require('./es_translated_final.json');
|
||||
|
||||
// placeholder for fixed es json file
|
||||
const fixedEs = {};
|
||||
|
||||
// loop through incorrect es.json file modify
|
||||
for (const [key, value] of Object.entries(englishJson)) {
|
||||
fixedEs[key] = value.defaultMessage;
|
||||
};
|
||||
|
||||
console.log(fixedEs);
|
||||
|
||||
// convert JSON object to string
|
||||
const fixedEsString = JSON.stringify(fixedEs);
|
||||
|
||||
// write JSON string to a file
|
||||
fs.writeFile('esNoNesting.json', fixedEsString, (err) => {
|
||||
if (err) {
|
||||
throw err;
|
||||
}
|
||||
console.log('JSON data is saved.');
|
||||
});
|
||||
|
||||
|
Loading…
Add table
Reference in a new issue