mirror of
https://github.com/inaturalist/iNaturalistReactNative.git
synced 2025-12-23 22:18:36 -05:00
i18n strings audit (#1350)
* Tried to get accessibilityHints to conform to Apple guidelines * Tried to make some more helpful `accessibilityLabel`s * Used fork of fluent_conv to support function results as selectors in Fluent * Custom VOWORCON function for Fluent Note that there are still many accessibility problems for screen readers. This just tries to make sure the strings up for translation are somewhat less confusing in that context. Part of #1223
This commit is contained in:
@@ -145,7 +145,7 @@ describe( "Signed in user", () => {
|
||||
await element( by.id( `ObsDetails.${uuid}` ) ).scrollTo( "bottom" );
|
||||
const comment = element( by.text( "This is a comment" ) );
|
||||
await waitFor( comment ).toBeVisible().withTimeout( 10000 );
|
||||
await element( by.label( "Navigate back" ) ).tap( );
|
||||
await element( by.label( "Go back" ) ).tap( );
|
||||
await waitFor( username ).toBeVisible( ).withTimeout( 10000 );
|
||||
|
||||
/*
|
||||
|
||||
@@ -12,6 +12,10 @@ const {
|
||||
resolver: { sourceExts, assetExts }
|
||||
} = getDefaultConfig();
|
||||
|
||||
const localPackagePaths = [
|
||||
// If you reference any local paths in package.json, you'll need to list them here
|
||||
];
|
||||
|
||||
/**
|
||||
* Metro configuration
|
||||
* https://facebook.github.io/metro/docs/configuration
|
||||
@@ -27,8 +31,10 @@ const config = {
|
||||
sourceExts:
|
||||
process.env.MOCK_MODE === "e2e"
|
||||
? ["e2e-mock", ...sourceExts, "svg"]
|
||||
: [...sourceExts, "svg"]
|
||||
}
|
||||
: [...sourceExts, "svg"],
|
||||
nodeModulesPaths: [...localPackagePaths]
|
||||
},
|
||||
watchFolders: [...localPackagePaths]
|
||||
};
|
||||
|
||||
module.exports = mergeConfig( getDefaultConfig( __dirname ), config );
|
||||
|
||||
@@ -159,7 +159,7 @@ const AddObsModal = ( { closeModal }: Props ): React.Node => {
|
||||
className="h-[69px] w-[69px] bg-inatGreen rounded-full"
|
||||
onPress={( ) => closeModal( )}
|
||||
accessibilityLabel={t( "Close" )}
|
||||
accessibilityHint={t( "Close-add-observation-modal" )}
|
||||
accessibilityHint={t( "Closes-new-observation-options" )}
|
||||
/>
|
||||
<INatIconButton
|
||||
testID="record-sound-button"
|
||||
|
||||
@@ -146,6 +146,7 @@ const ARCamera = ( {
|
||||
{showPrediction && result
|
||||
? (
|
||||
<TaxonResult
|
||||
accessibilityLabel={t( "View-suggestions" )}
|
||||
taxon={result?.taxon}
|
||||
handleCheckmarkPress={handlePress}
|
||||
testID={`ARCamera.taxa.${result?.taxon?.id}`}
|
||||
|
||||
@@ -20,7 +20,7 @@ const CameraFlip = ( {
|
||||
<TransparentCircleButton
|
||||
optionalClasses={cameraFlipClasses}
|
||||
onPress={flipCamera}
|
||||
accessibilityLabel={t( "Camera-flip" )}
|
||||
accessibilityLabel={t( "Flip-camera" )}
|
||||
accessibilityHint={t( "Use-the-devices-other-camera" )}
|
||||
icon="rotate"
|
||||
/>
|
||||
|
||||
@@ -20,8 +20,8 @@ const GreenCheckmark = ( {
|
||||
return (
|
||||
<INatIconButton
|
||||
onPress={handleCheckmarkPress}
|
||||
accessibilityLabel={t( "Checkmark" )}
|
||||
accessibilityHint={t( "Navigates-to-suggestions" )}
|
||||
accessibilityLabel={t( "View-suggestions" )}
|
||||
accessibilityHint={t( "Shows-identification-suggestions" )}
|
||||
disabled={false}
|
||||
icon="checkmark-circle"
|
||||
color={colors.inatGreen}
|
||||
|
||||
@@ -23,7 +23,7 @@ const DiscardChangesSheet = ( {
|
||||
return (
|
||||
<WarningSheet
|
||||
handleClose={( ) => setShowDiscardSheet( false )}
|
||||
headerText={t( "DISCARD-PHOTOS" )}
|
||||
headerText={t( "DISCARD-PHOTOS--question" )}
|
||||
text={t( "By-exiting-your-photos-will-not-be-saved" )}
|
||||
secondButtonText={t( "CANCEL" )}
|
||||
handleSecondButtonPress={( ) => setShowDiscardSheet( false )}
|
||||
|
||||
@@ -68,6 +68,7 @@ const Header = ( {
|
||||
{taxon
|
||||
? (
|
||||
<TaxonResult
|
||||
accessibilityLabel={t( "Change-taxon-filter" )}
|
||||
asListItem={false}
|
||||
taxon={taxon}
|
||||
showInfoButton={false}
|
||||
|
||||
@@ -137,7 +137,7 @@ const MediaViewer = ( {
|
||||
<WarningSheet
|
||||
handleClose={( ) => setMediaToDelete( null )}
|
||||
confirm={confirmDelete}
|
||||
headerText={t( "DISCARD-MEDIA" )}
|
||||
headerText={t( "DISCARD-MEDIA--question" )}
|
||||
buttonText={t( "DISCARD" )}
|
||||
secondButtonText={t( "CANCEL" )}
|
||||
handleSecondButtonPress={( ) => setMediaToDelete( null )}
|
||||
|
||||
@@ -163,7 +163,7 @@ const ActivityHeader = ( {
|
||||
{( currentUser && showDeleteCommentSheet ) && (
|
||||
<WarningSheet
|
||||
handleClose={( ) => setShowDeleteCommentSheet( false )}
|
||||
headerText={t( "DELETE-COMMENT-QUESTION" )}
|
||||
headerText={t( "DELETE-COMMENT--question" )}
|
||||
confirm={deleteComment}
|
||||
buttonText={t( "DELETE" )}
|
||||
handleSecondButtonPress={( ) => setShowDeleteCommentSheet( false )}
|
||||
|
||||
@@ -51,7 +51,7 @@ const FloatingButtons = ( {
|
||||
className="w-1/2 mx-6"
|
||||
testID="ObsDetail.cvSuggestionsButton"
|
||||
accessibilityRole="link"
|
||||
accessibilityHint={t( "Navigates-to-suggest-identification" )}
|
||||
accessibilityHint={t( "Shows-identification-suggestions" )}
|
||||
/>
|
||||
</View>
|
||||
);
|
||||
|
||||
@@ -28,7 +28,7 @@ const CoordinatesCopiedNotification = ( ): React.Node => {
|
||||
style={getShadowForColor( theme.colors.primary )}
|
||||
>
|
||||
<Body2 className="mr-3">
|
||||
{t( "Coordinates-copied-to-keyboard" )}
|
||||
{t( "Coordinates-copied-to-clipboard" )}
|
||||
</Body2>
|
||||
<INatIcon
|
||||
name="checkmark-circle"
|
||||
|
||||
@@ -76,7 +76,8 @@ const DQAVoteButtons = ( {
|
||||
size={33}
|
||||
color={theme.colors.secondary}
|
||||
onPress={() => removeVote( { metric, vote: true } )}
|
||||
accessibilityLabel={t( "Arrow-up-selected" )}
|
||||
accessibilityLabel={t( "Add-agreement" )}
|
||||
accessibilityHint={t( "Adds-your-vote-of-agreement" )}
|
||||
/>
|
||||
);
|
||||
}
|
||||
@@ -86,7 +87,8 @@ const DQAVoteButtons = ( {
|
||||
icon="arrow-up-bold-circle-outline"
|
||||
size={33}
|
||||
onPress={() => setVote( { metric, vote: true } )}
|
||||
accessibilityLabel={t( "Arrow-up-unselected" )}
|
||||
accessibilityLabel={t( "Remove-agreement" )}
|
||||
accessibilityHint={t( "Removes-your-vote-of-agreement" )}
|
||||
/>
|
||||
);
|
||||
};
|
||||
@@ -104,7 +106,8 @@ const DQAVoteButtons = ( {
|
||||
size={33}
|
||||
color={theme.colors.error}
|
||||
onPress={() => removeVote( { metric, vote: false } )}
|
||||
accessibilityLabel={t( "Arrow-down-selected" )}
|
||||
accessibilityLabel={t( "Remove-disagreement" )}
|
||||
accessibilityHint={t( "Removes-your-vote-of-disagreement" )}
|
||||
/>
|
||||
);
|
||||
}
|
||||
@@ -114,7 +117,8 @@ const DQAVoteButtons = ( {
|
||||
icon="arrow-down-bold-circle-outline"
|
||||
size={33}
|
||||
onPress={() => setVote( { metric, vote: false } )}
|
||||
accessibilityLabel={t( "Arrow-down-unselected" )}
|
||||
accessibilityLabel={t( "Add-disagreement" )}
|
||||
accessibilityHint={t( "Adds-your-vote-of-disagreement" )}
|
||||
/>
|
||||
);
|
||||
};
|
||||
|
||||
@@ -198,7 +198,7 @@ const DetailsTab = ( { observation }: Props ): Node => {
|
||||
<Heading4 className={headingClass}>{t( "DATE" )}</Heading4>
|
||||
<DateDisplay
|
||||
classNameMargin="mb-[12px]"
|
||||
label={t( "Date_observed_header_short" )}
|
||||
label={t( "Date-observed-header-short" )}
|
||||
dateString={checkCamelAndSnakeCase( observation, "timeObservedAt" )}
|
||||
/>
|
||||
<DateDisplay
|
||||
|
||||
@@ -124,14 +124,14 @@ const IdentificationSection = ( {
|
||||
<DisplayTaxon
|
||||
taxon={identification}
|
||||
handlePress={navToSuggestions}
|
||||
accessibilityLabel={t( "Navigates-to-add-identification" )}
|
||||
accessibilityLabel={t( "Edits-this-observations-taxon" )}
|
||||
/>
|
||||
<INatIconButton
|
||||
icon="edit"
|
||||
size={20}
|
||||
onPress={navToSuggestions}
|
||||
accessibilityLabel={t( "Edit" )}
|
||||
accessibilityHint={t( "Navigates-to-add-identification" )}
|
||||
accessibilityHint={t( "Edits-this-observations-taxon" )}
|
||||
/>
|
||||
</View>
|
||||
)}
|
||||
|
||||
@@ -58,7 +58,7 @@ const DeleteObservationSheet = ( {
|
||||
return (
|
||||
<WarningSheet
|
||||
handleClose={handleClose}
|
||||
headerText={t( "DELETE-OBSERVATION" )}
|
||||
headerText={t( "DELETE-OBSERVATION--question" )}
|
||||
handleSecondButtonPress={handleClose}
|
||||
secondButtonText={t( "CANCEL" )}
|
||||
confirm={addObservationToDeletionQueue}
|
||||
|
||||
@@ -1,40 +0,0 @@
|
||||
// @flow
|
||||
|
||||
import { t } from "i18next";
|
||||
import type { Node } from "react";
|
||||
import React from "react";
|
||||
import {
|
||||
Image,
|
||||
Pressable,
|
||||
Text,
|
||||
View
|
||||
} from "react-native";
|
||||
import { viewStyles } from "styles/settings/settings";
|
||||
|
||||
type Props = {
|
||||
unblockUser: Function,
|
||||
user: Object
|
||||
}
|
||||
|
||||
const BlockedUser = ( { user, unblockUser }:Props ): Node => (
|
||||
<View style={[viewStyles.row, viewStyles.relationshipRow]}>
|
||||
<Image
|
||||
style={viewStyles.relationshipImage}
|
||||
source={{ uri: user.icon }}
|
||||
accessibilityIgnoresInvertColors
|
||||
/>
|
||||
<View style={viewStyles.column}>
|
||||
<Text>{user.login}</Text>
|
||||
<Text>{user.name}</Text>
|
||||
</View>
|
||||
<Pressable
|
||||
accessibilityRole="button"
|
||||
style={viewStyles.removeRelationship}
|
||||
onPress={unblockUser}
|
||||
>
|
||||
<Text>{t( "Unblock" )}</Text>
|
||||
</Pressable>
|
||||
</View>
|
||||
);
|
||||
|
||||
export default BlockedUser;
|
||||
@@ -1,40 +0,0 @@
|
||||
// @flow
|
||||
|
||||
import { t } from "i18next";
|
||||
import type { Node } from "react";
|
||||
import React from "react";
|
||||
import {
|
||||
Image,
|
||||
Pressable,
|
||||
Text,
|
||||
View
|
||||
} from "react-native";
|
||||
import { viewStyles } from "styles/settings/settings";
|
||||
|
||||
type Props = {
|
||||
unmuteUser: Function,
|
||||
user: Object
|
||||
}
|
||||
|
||||
const MutedUser = ( { user, unmuteUser }: Props ): Node => (
|
||||
<View style={[viewStyles.row, viewStyles.relationshipRow]}>
|
||||
<Image
|
||||
style={viewStyles.relationshipImage}
|
||||
source={{ uri: user.icon }}
|
||||
accessibilityIgnoresInvertColors
|
||||
/>
|
||||
<View style={viewStyles.column}>
|
||||
<Text>{user.login}</Text>
|
||||
<Text>{user.name}</Text>
|
||||
</View>
|
||||
<Pressable
|
||||
accessibilityRole="button"
|
||||
style={viewStyles.removeRelationship}
|
||||
onPress={unmuteUser}
|
||||
>
|
||||
<Text>{t( "Unmute" )}</Text>
|
||||
</Pressable>
|
||||
</View>
|
||||
);
|
||||
|
||||
export default MutedUser;
|
||||
@@ -1,98 +0,0 @@
|
||||
// import { useQueryClient } from "@tanstack/react-query";
|
||||
// import fetchPlace from "api/places";
|
||||
// import fetchSearchResults from "api/search";
|
||||
// import inatPlaceTypes from "dictionaries/places";
|
||||
// import React, { useEffect } from "react";
|
||||
// import {
|
||||
// Image, Text, TextInput, View
|
||||
// } from "react-native";
|
||||
// import Pressable from "react-native/Libraries/Components/Pressable/Pressable";
|
||||
// import useAuthenticatedQuery from "sharedHooks/useAuthenticatedQuery";
|
||||
// import { textStyles, viewStyles } from "styles/settings/settings";
|
||||
// import { useDebounce } from "use-debounce";
|
||||
|
||||
// const PlaceSearchInput = ( { placeId, onPlaceChanged } ): React.Node => {
|
||||
// const [hideResults, setHideResults] = React.useState( true );
|
||||
// const [placeSearch, setPlaceSearch] = React.useState( "" );
|
||||
// // So we'll start searching only once the user finished typing
|
||||
// const [finalPlaceSearch] = useDebounce( placeSearch, 500 );
|
||||
|
||||
// const queryClient = useQueryClient( );
|
||||
|
||||
// // this seems necessary for clearing the cache between searches
|
||||
// queryClient.invalidateQueries( { queryKey: ["fetchSearchResults"] } );
|
||||
|
||||
// const {
|
||||
// data: placeResults
|
||||
// } = useAuthenticatedQuery(
|
||||
// ["fetchSearchResults", finalPlaceSearch],
|
||||
// optsWithAuth => fetchSearchResults( {
|
||||
// q: finalPlaceSearch,
|
||||
// sources: "places",
|
||||
// fields: "place,place.display_name,place.place_type"
|
||||
// }, optsWithAuth )
|
||||
// );
|
||||
|
||||
// const {
|
||||
// data: placeDetails
|
||||
// } = useAuthenticatedQuery(
|
||||
// ["fetchPlace", placeId],
|
||||
// optsWithAuth => fetchPlace( placeId, optsWithAuth )
|
||||
// );
|
||||
|
||||
// useEffect( () => {
|
||||
// if ( placeDetails ) {
|
||||
// setPlaceSearch( placeDetails.display_name );
|
||||
// } else {
|
||||
// setPlaceSearch( "" );
|
||||
// }
|
||||
// }, [placeDetails] );
|
||||
|
||||
// return (
|
||||
// <View style={viewStyles.column}>
|
||||
// <View style={viewStyles.row}>
|
||||
// <TextInput
|
||||
// accessibilityLabel="Text input field"
|
||||
// style={viewStyles.textInput}
|
||||
// onChangeText={v => {
|
||||
// setHideResults( false );
|
||||
// setPlaceSearch( v );
|
||||
// }}
|
||||
// value={placeSearch}
|
||||
// />
|
||||
// <Pressable
|
||||
// accessibilityRole="button"
|
||||
// style={viewStyles.clearSearch}
|
||||
// onPress={() => {
|
||||
// setHideResults( true );
|
||||
// setPlaceSearch( "" );
|
||||
// onPlaceChanged( 0 );
|
||||
// }}
|
||||
// >
|
||||
// <Image
|
||||
// style={viewStyles.clearSearch}
|
||||
// resizeMode="contain"
|
||||
// source={require( "images/clear.png" )}
|
||||
// accessibilityIgnoresInvertColors
|
||||
// />
|
||||
// </Pressable>
|
||||
// </View>
|
||||
// {!hideResults && finalPlaceSearch.length > 0 && placeResults?.map( place => (
|
||||
// <Pressable
|
||||
// accessibilityRole="button"
|
||||
// key={place.id}
|
||||
// style={[viewStyles.row, viewStyles.placeResultContainer]}
|
||||
// onPress={() => {
|
||||
// setHideResults( true );
|
||||
// onPlaceChanged( place.id );
|
||||
// }}
|
||||
// >
|
||||
// <Text style={textStyles.resultPlaceName}>{place.display_name}</Text>
|
||||
// <Text style={textStyles.resultPlaceType}>{inatPlaceTypes[place.place_type]}</Text>
|
||||
// </Pressable>
|
||||
// ) )}
|
||||
// </View>
|
||||
// );
|
||||
// };
|
||||
|
||||
// export default PlaceSearchInput;
|
||||
@@ -1,65 +0,0 @@
|
||||
// @flow
|
||||
|
||||
import { Checkbox } from "components/SharedComponents";
|
||||
import { t } from "i18next";
|
||||
import type { Node } from "react";
|
||||
import React from "react";
|
||||
import {
|
||||
Image,
|
||||
Pressable,
|
||||
Text,
|
||||
View
|
||||
} from "react-native";
|
||||
import { viewStyles } from "styles/settings/settings";
|
||||
|
||||
type Props = {
|
||||
relationship: Object,
|
||||
updateRelationship: Function,
|
||||
askToRemoveRelationship: Function
|
||||
}
|
||||
|
||||
const Relationship = ( {
|
||||
askToRemoveRelationship,
|
||||
relationship,
|
||||
updateRelationship
|
||||
}: Props ): Node => (
|
||||
<View style={[viewStyles.column, viewStyles.relationshipRow]}>
|
||||
<View style={viewStyles.row}>
|
||||
<Image
|
||||
style={viewStyles.relationshipImage}
|
||||
source={{ uri: relationship.friendUser.icon_url }}
|
||||
accessibilityIgnoresInvertColors
|
||||
/>
|
||||
<View style={viewStyles.column}>
|
||||
<Text>{relationship.friendUser.login}</Text>
|
||||
<Text>{relationship.friendUser.name}</Text>
|
||||
</View>
|
||||
<View style={viewStyles.column}>
|
||||
<Checkbox
|
||||
isChecked={relationship.following}
|
||||
onPress={
|
||||
( ) => { updateRelationship( relationship, { following: !relationship.following } ); }
|
||||
}
|
||||
text={t( "Following" )}
|
||||
/>
|
||||
<Checkbox
|
||||
isChecked={relationship.trust}
|
||||
onPress={
|
||||
( ) => { updateRelationship( relationship, { trust: !relationship.trust } ); }
|
||||
}
|
||||
text={t( "Trust-with-hidden-coordinates" )}
|
||||
/>
|
||||
</View>
|
||||
</View>
|
||||
<Text>{t( "Added-on-date", { date: relationship.created_at } )}</Text>
|
||||
<Pressable
|
||||
accessibilityRole="button"
|
||||
style={viewStyles.removeRelationship}
|
||||
onPress={() => askToRemoveRelationship( relationship )}
|
||||
>
|
||||
<Text>{t( "Remove-Relationship" )}</Text>
|
||||
</Pressable>
|
||||
</View>
|
||||
);
|
||||
|
||||
export default Relationship;
|
||||
@@ -1,79 +0,0 @@
|
||||
// @flow
|
||||
|
||||
import { Picker } from "@react-native-picker/picker";
|
||||
import { Checkbox } from "components/SharedComponents";
|
||||
import inatLanguages from "dictionaries/languages";
|
||||
import inatNetworks from "dictionaries/networks";
|
||||
import { t } from "i18next";
|
||||
import type { Node } from "react";
|
||||
import React from "react";
|
||||
import { Text, View } from "react-native";
|
||||
import { textStyles, viewStyles } from "styles/settings/settings";
|
||||
import colors from "styles/tailwindColors";
|
||||
|
||||
import PlaceSearchInput from "./PlaceSearchInput";
|
||||
import type { SettingsProps } from "./types";
|
||||
|
||||
const SettingsAccount = ( { settings, onSettingsModified }: SettingsProps ): Node => (
|
||||
<>
|
||||
<Text style={textStyles.title}>{t( "Account" )}</Text>
|
||||
|
||||
<Text style={[textStyles.subTitle]}>{t( "Language-Locale" )}</Text>
|
||||
<Text>{t( "This-sets-your-language-and-date-formatting-preferences-across-iNaturalist" )}</Text>
|
||||
<View style={viewStyles.selectorContainer}>
|
||||
<Picker
|
||||
style={viewStyles.selector}
|
||||
dropdownIconColor={colors.inatGreen}
|
||||
selectedValue={settings.locale}
|
||||
onValueChange={
|
||||
( itemValue, _itemIndex ) => onSettingsModified( { ...settings, locale: itemValue } )
|
||||
}
|
||||
>
|
||||
{Object.keys( inatLanguages ).map( k => (
|
||||
<Picker.Item
|
||||
key={k}
|
||||
label={inatLanguages[k]}
|
||||
value={k}
|
||||
/>
|
||||
) )}
|
||||
</Picker>
|
||||
</View>
|
||||
|
||||
<Text style={[textStyles.subTitle]}>{t( "Default-Search-Place" )}</Text>
|
||||
<Text>{t( "This-will-be-your-default-place-for-all-searches-in-Explore-and-Identify" )}</Text>
|
||||
<PlaceSearchInput
|
||||
placeId={settings.search_place_id}
|
||||
onPlaceChanged={p => onSettingsModified( { ...settings, search_place_id: p } )}
|
||||
/>
|
||||
|
||||
<Text style={[textStyles.subTitle]}>{t( "Privacy" )}</Text>
|
||||
<Checkbox
|
||||
isChecked={settings.prefers_no_tracking}
|
||||
onPress={v => onSettingsModified( { ...settings, prefers_no_tracking: v } )}
|
||||
text={t( "Do-not-collect-stability-and-usage-data-using-third-party-services" )}
|
||||
/>
|
||||
<Text style={[textStyles.subTitle]}>{t( "iNaturalist-Network-Affiliation" )}</Text>
|
||||
<View style={viewStyles.selectorContainer}>
|
||||
<Picker
|
||||
style={viewStyles.selector}
|
||||
dropdownIconColor={colors.inatGreen}
|
||||
selectedValue={settings.site_id}
|
||||
onValueChange={
|
||||
( itemValue, _itemIndex ) => onSettingsModified( { ...settings, site_id: itemValue } )
|
||||
}
|
||||
>
|
||||
{Object.keys( inatNetworks ).map( k => (
|
||||
<Picker.Item
|
||||
key={k}
|
||||
label={inatNetworks[k].name}
|
||||
value={k}
|
||||
/>
|
||||
) )}
|
||||
</Picker>
|
||||
</View>
|
||||
<Text>{t( "The-iNaturalist-Network-is-a-collection-of-localized-websites" )}</Text>
|
||||
|
||||
</>
|
||||
);
|
||||
|
||||
export default SettingsAccount;
|
||||
@@ -1,116 +0,0 @@
|
||||
// @flow
|
||||
|
||||
import { useQueryClient } from "@tanstack/react-query";
|
||||
import {
|
||||
fetchAuthorizedApplications, revokeAuthorizedApplications
|
||||
} from "api/authorizedApplications";
|
||||
import fetchProviderAuthorizations from "api/providerAuthorizations";
|
||||
import inatProviders from "dictionaries/providers";
|
||||
import { t } from "i18next";
|
||||
import type { Node } from "react";
|
||||
import React from "react";
|
||||
import { Alert, Text, View } from "react-native";
|
||||
import Pressable from "react-native/Libraries/Components/Pressable/Pressable";
|
||||
import useAuthenticatedMutation from "sharedHooks/useAuthenticatedMutation";
|
||||
import useAuthenticatedQuery from "sharedHooks/useAuthenticatedQuery";
|
||||
import { textStyles, viewStyles } from "styles/settings/settings";
|
||||
|
||||
const SettingsApplications = ( ): Node => {
|
||||
const {
|
||||
data: authorizedApps,
|
||||
refetch
|
||||
} = useAuthenticatedQuery(
|
||||
["fetchAuthorizedApplications"],
|
||||
optsWithAuth => fetchAuthorizedApplications( { }, optsWithAuth )
|
||||
);
|
||||
|
||||
const {
|
||||
data: providerAuthorizations
|
||||
} = useAuthenticatedQuery(
|
||||
["fetchProviderAuthorizations"],
|
||||
optsWithAuth => fetchProviderAuthorizations( { }, optsWithAuth )
|
||||
);
|
||||
|
||||
const queryClient = useQueryClient( );
|
||||
|
||||
const revokeAppMutation = useAuthenticatedMutation(
|
||||
( params, optsWithAuth ) => revokeAuthorizedApplications( params, optsWithAuth ),
|
||||
{
|
||||
onSuccess: ( ) => {
|
||||
queryClient.invalidateQueries( { queryKey: ["fetchAuthorizedApplications"] } );
|
||||
refetch( );
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
const revokeApp = async appId => {
|
||||
revokeAppMutation.mutate( { id: appId } );
|
||||
};
|
||||
|
||||
const askToRevokeApp = app => {
|
||||
Alert.alert(
|
||||
`Revoke ${app.application.name}?`,
|
||||
"This will sign you out of your current session on this application.",
|
||||
[
|
||||
{ text: "Revoke", onPress: () => revokeApp( app.application.id ) }
|
||||
],
|
||||
{
|
||||
cancelable: true
|
||||
}
|
||||
);
|
||||
};
|
||||
|
||||
return (
|
||||
<View>
|
||||
<Text style={textStyles.title}>{t( "iNaturalist-Applications" )}</Text>
|
||||
{authorizedApps?.filter( app => app.application.official ).map( app => (
|
||||
<View key={app.application.id}>
|
||||
<Text>
|
||||
{app.application.name}
|
||||
</Text>
|
||||
<Pressable
|
||||
accessibilityRole="button"
|
||||
style={viewStyles.revokeAccess}
|
||||
onPress={() => askToRevokeApp( app )}
|
||||
>
|
||||
<Text>{t( "Revoke" )}</Text>
|
||||
</Pressable>
|
||||
</View>
|
||||
) )}
|
||||
|
||||
<Text style={[textStyles.title, textStyles.marginTop]}>{t( "Connected-Accounts" )}</Text>
|
||||
{Object.keys( inatProviders ).map( providerKey => {
|
||||
const connectedProvider = providerAuthorizations?.find(
|
||||
x => x.provider_name === providerKey
|
||||
);
|
||||
return (
|
||||
<Text
|
||||
key={providerKey}
|
||||
>
|
||||
{inatProviders[providerKey]}
|
||||
{" "}
|
||||
{connectedProvider && `(authorized on: ${connectedProvider.created_at})`}
|
||||
</Text>
|
||||
);
|
||||
} )}
|
||||
|
||||
<Text style={[textStyles.title, textStyles.marginTop]}>{t( "External-Applications" )}</Text>
|
||||
{authorizedApps?.filter( app => !app.application.official ).map( app => (
|
||||
<View key={app.application.id} style={[viewStyles.row, viewStyles.applicationRow]}>
|
||||
<Text style={textStyles.applicationName}>
|
||||
{t( "app-authorized-on-date", { appName: app.application.name, date: app.created_at } )}
|
||||
</Text>
|
||||
<Pressable
|
||||
accessibilityRole="button"
|
||||
style={viewStyles.revokeAccess}
|
||||
onPress={() => askToRevokeApp( app )}
|
||||
>
|
||||
<Text>{t( "Revoke" )}</Text>
|
||||
</Pressable>
|
||||
</View>
|
||||
) )}
|
||||
</View>
|
||||
);
|
||||
};
|
||||
|
||||
export default SettingsApplications;
|
||||
@@ -1,223 +0,0 @@
|
||||
// @flow
|
||||
|
||||
import { Picker } from "@react-native-picker/picker";
|
||||
import { Checkbox } from "components/SharedComponents";
|
||||
import inatLicenses from "dictionaries/licenses";
|
||||
import { t } from "i18next";
|
||||
import type { Node } from "react";
|
||||
import React from "react";
|
||||
import { Text, View } from "react-native";
|
||||
import { textStyles, viewStyles } from "styles/settings/settings";
|
||||
import colors from "styles/tailwindColors";
|
||||
|
||||
import PlaceSearchInput from "./PlaceSearchInput";
|
||||
import type { SettingsProps } from "./types";
|
||||
|
||||
const PROJECT_SETTINGS = {
|
||||
any: "Any",
|
||||
joined: "Projects you've joined",
|
||||
none: "None, only you can add your observations to projects"
|
||||
};
|
||||
|
||||
const TAXON_DISPLAY = {
|
||||
prefers_common_names: "Common Name (Scientific Name)",
|
||||
prefers_scientific_name_first: "Scientific Name (Common Name)",
|
||||
prefers_scientific_names: "Scientific Name"
|
||||
};
|
||||
|
||||
const ADD_OBSERVATION_FIELDS = {
|
||||
anyone: "Anyone",
|
||||
curators: "Curators",
|
||||
observer: "Only you"
|
||||
};
|
||||
|
||||
const LicenseSelector = ( {
|
||||
value,
|
||||
onValueChanged,
|
||||
title,
|
||||
updateExistingTitle,
|
||||
onUpdateExisting,
|
||||
updateExisting
|
||||
} ): Node => (
|
||||
<>
|
||||
<Text style={textStyles.subTitle}>{title}</Text>
|
||||
<View style={viewStyles.selectorContainer}>
|
||||
<Picker
|
||||
style={viewStyles.selector}
|
||||
dropdownIconColor={colors.inatGreen}
|
||||
selectedValue={value}
|
||||
onValueChange={onValueChanged}
|
||||
>
|
||||
{inatLicenses.map( l => (
|
||||
<Picker.Item
|
||||
key={l.value}
|
||||
label={l.title}
|
||||
value={l.value}
|
||||
/>
|
||||
) )}
|
||||
</Picker>
|
||||
</View>
|
||||
<Checkbox
|
||||
isChecked={updateExisting}
|
||||
onPress={onUpdateExisting}
|
||||
text={updateExistingTitle}
|
||||
/>
|
||||
</>
|
||||
);
|
||||
|
||||
const SettingsContentDisplay = ( { settings, onSettingsModified }: SettingsProps ): Node => {
|
||||
let taxonNamePreference = "prefers_common_names";
|
||||
if ( settings.prefers_scientific_name_first ) {
|
||||
taxonNamePreference = "prefers_scientific_name_first";
|
||||
} else if ( settings.prefers_scientific_names ) {
|
||||
taxonNamePreference = "prefers_scientific_names";
|
||||
}
|
||||
|
||||
return (
|
||||
<>
|
||||
<Text style={textStyles.title}>{t( "Project-Settings" )}</Text>
|
||||
<Text style={textStyles.subTitle}>
|
||||
{t( "Which-traditional-projects-can-add-your-observations" )}
|
||||
</Text>
|
||||
<View style={viewStyles.selectorContainer}>
|
||||
<Picker
|
||||
style={viewStyles.selector}
|
||||
dropdownIconColor={colors.inatGreen}
|
||||
selectedValue={settings.preferred_project_addition_by}
|
||||
onValueChange={( itemValue, _itemIndex ) => onSettingsModified( {
|
||||
...settings,
|
||||
preferred_project_addition_by: itemValue
|
||||
} )}
|
||||
>
|
||||
{Object.keys( PROJECT_SETTINGS ).map( k => (
|
||||
<Picker.Item
|
||||
key={k}
|
||||
label={PROJECT_SETTINGS[k]}
|
||||
value={k}
|
||||
/>
|
||||
) )}
|
||||
</Picker>
|
||||
</View>
|
||||
|
||||
<Text style={[textStyles.title, textStyles.marginTop]}>{t( "Taxonomy-Settings" )}</Text>
|
||||
<Checkbox
|
||||
isChecked={settings.prefers_automatic_taxonomic_changes}
|
||||
onPress={v => {
|
||||
onSettingsModified( { ...settings, prefers_automatic_taxonomic_changes: v } );
|
||||
}}
|
||||
text={t( "Automatically-update-my-content-for-taxon-changes" )}
|
||||
/>
|
||||
<Text style={[textStyles.title, textStyles.marginTop]}>{t( "Names" )}</Text>
|
||||
<Text style={textStyles.subTitle}>{t( "Display" )}</Text>
|
||||
<Text>{t( "This-is-how-all-taxon-names-will-be-displayed-to-you-across-iNaturalist" )}</Text>
|
||||
<View style={viewStyles.selectorContainer}>
|
||||
<Picker
|
||||
style={viewStyles.selector}
|
||||
dropdownIconColor={colors.inatGreen}
|
||||
selectedValue={taxonNamePreference}
|
||||
onValueChange={( value, _itemIndex ) => {
|
||||
if ( value === "prefers_common_names" ) {
|
||||
onSettingsModified( {
|
||||
...settings,
|
||||
prefers_common_names: true,
|
||||
prefers_scientific_name_first: false
|
||||
} );
|
||||
} else if ( value === "prefers_scientific_name_first" ) {
|
||||
onSettingsModified( {
|
||||
...settings,
|
||||
prefers_common_names: true,
|
||||
prefers_scientific_name_first: true
|
||||
} );
|
||||
} else if ( value === "prefers_scientific_names" ) {
|
||||
onSettingsModified( {
|
||||
...settings,
|
||||
prefers_common_names: false,
|
||||
prefers_scientific_name_first: false
|
||||
} );
|
||||
}
|
||||
}}
|
||||
>
|
||||
{Object.keys( TAXON_DISPLAY ).map( k => (
|
||||
<Picker.Item
|
||||
key={k}
|
||||
label={TAXON_DISPLAY[k]}
|
||||
value={k}
|
||||
/>
|
||||
) )}
|
||||
</Picker>
|
||||
</View>
|
||||
<Text style={textStyles.subTitle}>{t( "Prioritize-common-names-used-in-this-place" )}</Text>
|
||||
<PlaceSearchInput
|
||||
placeId={settings.place_id}
|
||||
onPlaceChanged={p => onSettingsModified( { ...settings, place_id: p } )}
|
||||
/>
|
||||
|
||||
<Text style={[textStyles.title, textStyles.marginTop]}>
|
||||
{t( "Community-Moderation-Settings" )}
|
||||
</Text>
|
||||
<Checkbox
|
||||
isChecked={settings.prefers_community_taxa}
|
||||
onPress={v => {
|
||||
onSettingsModified( { ...settings, prefers_community_taxa: v } );
|
||||
}}
|
||||
text={t( "Accept-community-identifications" )}
|
||||
/>
|
||||
<Text style={textStyles.subTitle}>
|
||||
{t( "Who-can-add-observation-fields-to-my-observations" )}
|
||||
</Text>
|
||||
<View style={viewStyles.selectorContainer}>
|
||||
<Picker
|
||||
style={viewStyles.selector}
|
||||
dropdownIconColor={colors.inatGreen}
|
||||
selectedValue={settings.preferred_observation_fields_by}
|
||||
onValueChange={( itemValue, _itemIndex ) => onSettingsModified( {
|
||||
...settings,
|
||||
preferred_observation_fields_by: itemValue
|
||||
} )}
|
||||
>
|
||||
{Object.keys( ADD_OBSERVATION_FIELDS ).map( k => (
|
||||
<Picker.Item
|
||||
key={k}
|
||||
label={ADD_OBSERVATION_FIELDS[k]}
|
||||
value={k}
|
||||
/>
|
||||
) )}
|
||||
</Picker>
|
||||
</View>
|
||||
|
||||
<Text style={[textStyles.title, textStyles.marginTop]}>{t( "Licensing" )}</Text>
|
||||
<LicenseSelector
|
||||
title="Default observation license"
|
||||
value={settings.preferred_observation_license}
|
||||
onValueChanged={v => onSettingsModified( {
|
||||
...settings,
|
||||
preferred_observation_license: v
|
||||
} )}
|
||||
updateExistingTitle="Update existing observations with new license choices"
|
||||
updateExisting={settings.make_observation_licenses_same}
|
||||
onUpdateExisting={v => onSettingsModified( {
|
||||
...settings,
|
||||
make_observation_licenses_same: v
|
||||
} )}
|
||||
/>
|
||||
<LicenseSelector
|
||||
title="Default photo license"
|
||||
value={settings.preferred_photo_license}
|
||||
onValueChanged={v => onSettingsModified( { ...settings, preferred_photo_license: v } )}
|
||||
updateExistingTitle="Update existing photos with new license choices"
|
||||
updateExisting={settings.make_photo_licenses_same}
|
||||
onUpdateExisting={v => onSettingsModified( { ...settings, make_photo_licenses_same: v } )}
|
||||
/>
|
||||
<LicenseSelector
|
||||
title="Default sound license"
|
||||
value={settings.preferred_sound_license}
|
||||
onValueChanged={v => onSettingsModified( { ...settings, preferred_sound_license: v } )}
|
||||
updateExistingTitle="Update existing sounds with new license choices"
|
||||
updateExisting={settings.make_sound_licenses_same}
|
||||
onUpdateExisting={v => onSettingsModified( { ...settings, make_sound_licenses_same: v } )}
|
||||
/>
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
export default SettingsContentDisplay;
|
||||
@@ -1,98 +0,0 @@
|
||||
// @flow
|
||||
|
||||
import { Checkbox } from "components/SharedComponents";
|
||||
import { t } from "i18next";
|
||||
import type { Node } from "react";
|
||||
import React from "react";
|
||||
import { Text, View } from "react-native";
|
||||
import Switch from "react-native/Libraries/Components/Switch/Switch";
|
||||
import { textStyles, viewStyles } from "styles/settings/settings";
|
||||
|
||||
import type { SettingsProps } from "./types";
|
||||
|
||||
const EMAIL_NOTIFICATIONS = {
|
||||
Comments: "prefers_comment_email_notification",
|
||||
Identifications: "prefers_identification_email_notification",
|
||||
Mentions: "prefers_mention_email_notification",
|
||||
Messages: "prefers_message_email_notification",
|
||||
"Project journal posts": "prefers_project_journal_post_email_notification",
|
||||
// eslint-disable-next-line max-len
|
||||
"When a project adds your observations": "prefers_project_added_your_observation_email_notification",
|
||||
"Project curator changes": "prefers_project_curator_change_email_notification",
|
||||
"Taxonomy changes": "prefers_taxon_change_email_notification",
|
||||
"Observations by people I follow": "prefers_user_observation_email_notification",
|
||||
// eslint-disable-next-line max-len
|
||||
"Observations of taxa or from places that I subscribe to": "prefers_taxon_or_place_observation_email_notification"
|
||||
};
|
||||
|
||||
const EmailNotification = ( { title, value, onValueChange } ): Node => (
|
||||
<Checkbox
|
||||
isChecked={value}
|
||||
onPress={onValueChange}
|
||||
text={title}
|
||||
/>
|
||||
);
|
||||
|
||||
const Notification = ( {
|
||||
title, description, value, onValueChange
|
||||
} ): Node => (
|
||||
<View style={[viewStyles.row, viewStyles.notificationContainer]}>
|
||||
<View style={[viewStyles.column, viewStyles.notificationLeftSide]}>
|
||||
<Text style={textStyles.notificationTitle}>{title}</Text>
|
||||
<Text>{description}</Text>
|
||||
</View>
|
||||
<View style={[viewStyles.column, viewStyles.switch]}>
|
||||
<Switch value={value} onValueChange={onValueChange} />
|
||||
</View>
|
||||
</View>
|
||||
);
|
||||
|
||||
const SettingsNotifications = ( { settings, onSettingsModified }: SettingsProps ): Node => (
|
||||
<>
|
||||
<Text style={textStyles.title}>{t( "iNaturalist-Activity-Notifications" )}</Text>
|
||||
<Notification
|
||||
title="Notify me of mentions (e.g. @username)"
|
||||
// eslint-disable-next-line max-len
|
||||
description="If you turn this off, you will not get any notifications when someone mentions you on iNaturalist."
|
||||
value={settings.prefers_receive_mentions}
|
||||
onValueChange={v => onSettingsModified( { ...settings, prefers_receive_mentions: v } )}
|
||||
/>
|
||||
<Notification
|
||||
title="Confirming ID's"
|
||||
// eslint-disable-next-line max-len
|
||||
description="If you turn this off, you will no longer be notified about IDs that agree with yours."
|
||||
value={settings.prefers_redundant_identification_notifications}
|
||||
onValueChange={v => onSettingsModified( {
|
||||
...settings,
|
||||
prefers_redundant_identification_notifications: v
|
||||
} )}
|
||||
/>
|
||||
<Text style={textStyles.title}>{t( "Email-Notifications" )}</Text>
|
||||
<Notification
|
||||
title="Receive Email Notifications"
|
||||
// eslint-disable-next-line max-len
|
||||
description="If you turn this off, you will no longer receive any emails from iNaturalist regarding notifications."
|
||||
value={!settings.prefers_no_email}
|
||||
onValueChange={v => onSettingsModified( { ...settings, prefers_no_email: !v } )}
|
||||
/>
|
||||
|
||||
{!settings.prefers_no_email
|
||||
&& (
|
||||
<>
|
||||
{Object.keys( EMAIL_NOTIFICATIONS ).map( k => (
|
||||
<EmailNotification
|
||||
key={k}
|
||||
title={k}
|
||||
value={settings[EMAIL_NOTIFICATIONS[k]]}
|
||||
onValueChange={
|
||||
// $FlowIgnore
|
||||
v => onSettingsModified( { ...settings, [EMAIL_NOTIFICATIONS[k]]: v } )
|
||||
}
|
||||
/>
|
||||
) )}
|
||||
</>
|
||||
)}
|
||||
</>
|
||||
);
|
||||
|
||||
export { EMAIL_NOTIFICATIONS, SettingsNotifications };
|
||||
@@ -1,97 +0,0 @@
|
||||
// @flow
|
||||
|
||||
import { t } from "i18next";
|
||||
import type { Node } from "react";
|
||||
import React from "react";
|
||||
import {
|
||||
Button, Image, Text, TextInput, View
|
||||
} from "react-native";
|
||||
// $FlowIgnore
|
||||
import { launchImageLibrary } from "react-native-image-picker";
|
||||
import { viewStyles } from "styles/settings/settings";
|
||||
|
||||
import type { SettingsProps } from "./types";
|
||||
|
||||
const SettingsProfile = ( { settings, onSettingsModified }: SettingsProps ): Node => {
|
||||
let profileSource;
|
||||
if ( settings.newProfilePhoto && !settings.removeProfilePhoto ) {
|
||||
profileSource = { uri: settings.newProfilePhoto.uri };
|
||||
} else if (
|
||||
settings.icon && !settings.removeProfilePhoto ) {
|
||||
profileSource = { uri: settings.icon };
|
||||
} else {
|
||||
profileSource = require( "images/profile.png" );
|
||||
}
|
||||
|
||||
const onImageSelected = response => {
|
||||
if ( response.didCancel ) { return; }
|
||||
onSettingsModified( {
|
||||
...settings,
|
||||
newProfilePhoto: response.assets[0],
|
||||
removeProfilePhoto: false
|
||||
} );
|
||||
};
|
||||
|
||||
return (
|
||||
<>
|
||||
<Text>{t( "Profile-Picture" )}</Text>
|
||||
<View style={viewStyles.row}>
|
||||
<Image
|
||||
style={viewStyles.profileImage}
|
||||
source={profileSource}
|
||||
accessibilityIgnoresInvertColors
|
||||
/>
|
||||
<View style={viewStyles.column}>
|
||||
<Button
|
||||
title="Upload New Photo"
|
||||
onPress={() => launchImageLibrary( {}, onImageSelected )}
|
||||
/>
|
||||
<Button
|
||||
title="Remove Photo"
|
||||
onPress={() => onSettingsModified( { ...settings, removeProfilePhoto: true } )}
|
||||
/>
|
||||
</View>
|
||||
</View>
|
||||
<View style={viewStyles.column}>
|
||||
<Text>{t( "Username" )}</Text>
|
||||
<TextInput
|
||||
accessibilityLabel="Text input field"
|
||||
style={viewStyles.textInput}
|
||||
onChangeText={x => onSettingsModified( { ...settings, login: x } )}
|
||||
value={settings.login}
|
||||
/>
|
||||
</View>
|
||||
<View style={viewStyles.column}>
|
||||
<Text>{t( "Email" )}</Text>
|
||||
<TextInput
|
||||
accessibilityLabel="Text input field"
|
||||
style={viewStyles.textInput}
|
||||
onChangeText={x => onSettingsModified( { ...settings, email: x } )}
|
||||
value={settings.email}
|
||||
/>
|
||||
</View>
|
||||
<View style={viewStyles.column}>
|
||||
<Text>{t( "Display-Name" )}</Text>
|
||||
<TextInput
|
||||
accessibilityLabel="Text input field"
|
||||
style={viewStyles.textInput}
|
||||
onChangeText={x => onSettingsModified( { ...settings, name: x } )}
|
||||
value={settings.name}
|
||||
/>
|
||||
</View>
|
||||
<View style={viewStyles.column}>
|
||||
<Text>{t( "Bio" )}</Text>
|
||||
<TextInput
|
||||
accessibilityLabel="Text input field"
|
||||
style={viewStyles.textInput}
|
||||
multiline
|
||||
numberOfLines={4}
|
||||
onChangeText={x => onSettingsModified( { ...settings, description: x } )}
|
||||
value={settings.description}
|
||||
/>
|
||||
</View>
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
export default SettingsProfile;
|
||||
@@ -1,87 +0,0 @@
|
||||
// import fetchSearchResults from "api/search";
|
||||
// import React, { useEffect } from "react";
|
||||
// import {
|
||||
// Image, Text, TextInput, View
|
||||
// } from "react-native";
|
||||
// import Pressable from "react-native/Libraries/Components/Pressable/Pressable";
|
||||
// import useAuthenticatedQuery from "sharedHooks/useAuthenticatedQuery";
|
||||
// import { textStyles, viewStyles } from "styles/settings/settings";
|
||||
// import { useDebounce } from "use-debounce";
|
||||
|
||||
// const UserSearchInput = ( { onUserChanged } ): React.Node => {
|
||||
// const [hideResults, setHideResults] = React.useState( true );
|
||||
// const [userSearch, setUserSearch] = React.useState( "" );
|
||||
// // So we'll start searching only once the user finished typing
|
||||
// const [finalUserSearch] = useDebounce( userSearch, 500 );
|
||||
// const {
|
||||
// data: userResults
|
||||
// } = useAuthenticatedQuery(
|
||||
// ["fetchSearchResults", finalUserSearch],
|
||||
// optsWithAuth => fetchSearchResults( {
|
||||
// q: finalUserSearch,
|
||||
// sources: "users",
|
||||
// fields: "user.login,user.name,user.icon"
|
||||
// }, optsWithAuth )
|
||||
// );
|
||||
|
||||
// useEffect( () => {
|
||||
// if ( finalUserSearch.length === 0 ) {
|
||||
// setHideResults( true );
|
||||
// }
|
||||
// }, [finalUserSearch] );
|
||||
|
||||
// return (
|
||||
// <View style={viewStyles.column}>
|
||||
// <View style={viewStyles.row}>
|
||||
// <TextInput
|
||||
// accessibilityLabel="Text input field"
|
||||
// style={viewStyles.textInput}
|
||||
// onChangeText={v => {
|
||||
// setHideResults( false );
|
||||
// setUserSearch( v );
|
||||
// }}
|
||||
// value={userSearch}
|
||||
// />
|
||||
// <Pressable
|
||||
// accessibilityRole="button"
|
||||
// style={viewStyles.clearSearch}
|
||||
// onPress={() => {
|
||||
// setHideResults( true );
|
||||
// onUserChanged( null );
|
||||
// setUserSearch( "" );
|
||||
// }}
|
||||
// >
|
||||
// <Image
|
||||
// style={viewStyles.clearSearch}
|
||||
// resizeMode="contain"
|
||||
// source={require( "images/clear.png" )}
|
||||
// accessibilityIgnoresInvertColors
|
||||
// />
|
||||
// </Pressable>
|
||||
// </View>
|
||||
// {!hideResults && finalUserSearch.length > 0 && userResults?.map( result => (
|
||||
// <Pressable
|
||||
// accessibilityRole="button"
|
||||
// key={result.id}
|
||||
// style={[viewStyles.row, viewStyles.placeResultContainer]}
|
||||
// onPress={() => {
|
||||
// setHideResults( true );
|
||||
// onUserChanged( result );
|
||||
// setUserSearch( result.login );
|
||||
// }}
|
||||
// >
|
||||
// <Image
|
||||
// style={viewStyles.userPic}
|
||||
// resizeMode="contain"
|
||||
// source={{ uri: result.icon }}
|
||||
// accessibilityIgnoresInvertColors
|
||||
// />
|
||||
// <Text style={textStyles.resultPlaceName}>{result.login}</Text>
|
||||
// <Text style={textStyles.resultPlaceType}>{result.name}</Text>
|
||||
// </Pressable>
|
||||
// ) )}
|
||||
// </View>
|
||||
// );
|
||||
// };
|
||||
|
||||
// export default UserSearchInput;
|
||||
@@ -1,6 +0,0 @@
|
||||
// @flow
|
||||
|
||||
export type SettingsProps = {
|
||||
settings: Object,
|
||||
onSettingsModified: Function
|
||||
}
|
||||
@@ -6,21 +6,21 @@ import React, { useMemo } from "react";
|
||||
// eslint-disable-next-line import/no-extraneous-dependencies
|
||||
import BouncyCheckbox from "react-native-bouncy-checkbox";
|
||||
import { useTheme } from "react-native-paper";
|
||||
import { useTranslation } from "sharedHooks";
|
||||
|
||||
type Props = {
|
||||
accessibilityLabel: string,
|
||||
isChecked: boolean,
|
||||
onPress: Function,
|
||||
text: string
|
||||
}
|
||||
|
||||
const Checkbox = ( {
|
||||
accessibilityLabel,
|
||||
isChecked = false,
|
||||
onPress,
|
||||
text
|
||||
}: Props ): Node => {
|
||||
const theme = useTheme( );
|
||||
const { t } = useTranslation( );
|
||||
|
||||
const renderCheckboxText = useMemo( ( ) => {
|
||||
if ( !text ) { return null; }
|
||||
@@ -57,8 +57,8 @@ const Checkbox = ( {
|
||||
textComponent={renderCheckboxText}
|
||||
iconStyle={iconStyle}
|
||||
innerIconStyle={innerIconStyle}
|
||||
accessibilityLabel={accessibilityLabel}
|
||||
accessibilityRole="radio"
|
||||
accessibilityLabel={t( "Checkmark" )}
|
||||
accessibilityState={{
|
||||
checked: isChecked
|
||||
}}
|
||||
|
||||
@@ -138,7 +138,7 @@ const DetailsMap = ( {
|
||||
<FloatingActionButton
|
||||
icon="copy"
|
||||
onPress={( ) => copyCoordinates( )}
|
||||
accessibilityLabel={t( "Copy-map-coordinates" )}
|
||||
accessibilityLabel={t( "Copy-coordinates" )}
|
||||
buttonClassName="top-0 left-0"
|
||||
theme={theme}
|
||||
/>
|
||||
|
||||
@@ -18,6 +18,7 @@ import { useCurrentUser, useTaxon, useTranslation } from "sharedHooks";
|
||||
import ConfidenceInterval from "./ConfidenceInterval";
|
||||
|
||||
type Props = {
|
||||
accessibilityLabel: string,
|
||||
activeColor?: string,
|
||||
asListItem?: boolean,
|
||||
clearBackground?: boolean,
|
||||
@@ -36,6 +37,7 @@ type Props = {
|
||||
};
|
||||
|
||||
const TaxonResult = ( {
|
||||
accessibilityLabel,
|
||||
activeColor,
|
||||
asListItem = true,
|
||||
clearBackground,
|
||||
@@ -160,8 +162,7 @@ const TaxonResult = ( {
|
||||
: theme.colors.secondary
|
||||
}
|
||||
onPress={() => handleCheckmarkPress( usableTaxon )}
|
||||
accessibilityLabel={t( "Checkmark" )}
|
||||
accessibilityHint={t( "Add-this-ID" )}
|
||||
accessibilityLabel={accessibilityLabel}
|
||||
testID={`${testID}.checkmark`}
|
||||
/>
|
||||
)}
|
||||
|
||||
@@ -304,7 +304,7 @@ const SoundRecorder = (): Node => {
|
||||
</BottomSheet>
|
||||
<WarningSheet
|
||||
hidden={!exitWarningShown}
|
||||
headerText={t( "DISCARD-SOUND-header" )}
|
||||
headerText={t( "DISCARD-SOUND--question" )}
|
||||
text={t( "By-exiting-your-recorded-sound-will-not-be-saved" )}
|
||||
confirm={onBack}
|
||||
handleClose={( ) => setExitWarningShown( false )}
|
||||
|
||||
@@ -11,12 +11,18 @@ import {
|
||||
} from "sharedHelpers/convertScores";
|
||||
|
||||
type Props = {
|
||||
accessibilityLabel: string,
|
||||
onTaxonChosen: Function,
|
||||
suggestion: Object,
|
||||
};
|
||||
|
||||
const Suggestion = ( { suggestion, onTaxonChosen }: Props ): Node => (
|
||||
const Suggestion = ( {
|
||||
accessibilityLabel,
|
||||
suggestion,
|
||||
onTaxonChosen
|
||||
}: Props ): Node => (
|
||||
<TaxonResult
|
||||
accessibilityLabel={accessibilityLabel}
|
||||
taxon={suggestion.taxon}
|
||||
handleCheckmarkPress={onTaxonChosen}
|
||||
testID={`SuggestionsList.taxa.${suggestion?.taxon?.id}`}
|
||||
|
||||
@@ -79,10 +79,11 @@ const Suggestions = ( {
|
||||
|
||||
const renderItem = useCallback( ( { item: suggestion } ) => (
|
||||
<Suggestion
|
||||
accessibilityLabel={t( "Choose-taxon" )}
|
||||
suggestion={suggestion}
|
||||
onTaxonChosen={onTaxonChosen}
|
||||
/>
|
||||
), [onTaxonChosen] );
|
||||
), [onTaxonChosen, t] );
|
||||
|
||||
const renderEmptyList = useCallback( ( ) => (
|
||||
<SuggestionsEmpty loading={loading} />
|
||||
@@ -138,6 +139,7 @@ const Suggestions = ( {
|
||||
<Heading4 className="mt-6 mb-4 ml-4">{t( "TOP-ID-SUGGESTION" )}</Heading4>
|
||||
<View className="bg-inatGreen/[.13]">
|
||||
<Suggestion
|
||||
accessibilityLabel={t( "Choose-taxon" )}
|
||||
suggestion={topSuggestion}
|
||||
onTaxonChosen={onTaxonChosen}
|
||||
/>
|
||||
|
||||
@@ -13,7 +13,7 @@ import React, {
|
||||
} from "react";
|
||||
import { FlatList } from "react-native";
|
||||
import { useTheme } from "react-native-paper";
|
||||
import useTaxonSearch from "sharedHooks/useTaxonSearch";
|
||||
import { useTaxonSearch, useTranslation } from "sharedHooks";
|
||||
import { getShadowStyle } from "styles/global";
|
||||
|
||||
import AddCommentPrompt from "./AddCommentPrompt";
|
||||
@@ -34,6 +34,7 @@ const TaxonSearch = ( ): Node => {
|
||||
const [taxonQuery, setTaxonQuery] = useState( "" );
|
||||
const [selectedTaxon, setSelectedTaxon] = useState( null );
|
||||
const taxonList = useTaxonSearch( taxonQuery );
|
||||
const { t } = useTranslation( );
|
||||
|
||||
useNavigateWithTaxonSelected( selectedTaxon, { vision: false } );
|
||||
|
||||
@@ -41,13 +42,14 @@ const TaxonSearch = ( ): Node => {
|
||||
|
||||
const renderTaxonResult = useCallback( ( { item: taxon, index } ) => (
|
||||
<TaxonResult
|
||||
accessibilityLabel={t( "Choose-taxon" )}
|
||||
taxon={taxon}
|
||||
handleCheckmarkPress={() => setSelectedTaxon( taxon )}
|
||||
testID={`Search.taxa.${taxon.id}`}
|
||||
first={index === 0}
|
||||
fetchRemote={false}
|
||||
/>
|
||||
), [setSelectedTaxon] );
|
||||
), [setSelectedTaxon, t] );
|
||||
|
||||
return (
|
||||
<ViewWrapper>
|
||||
|
||||
@@ -209,7 +209,7 @@ async function untranslatable( ) {
|
||||
console.log( "✅ No keys missing in strings.ftl" );
|
||||
} else {
|
||||
console.error(
|
||||
`❌ ${untranslatableKeys.length} keys found missing in strings.ftl: ${untranslatableKeys}`
|
||||
`❌ ${untranslatableKeys.length} keys in use missing from strings.ftl: ${untranslatableKeys}`
|
||||
);
|
||||
process.exit( 1 );
|
||||
}
|
||||
|
||||
@@ -34,6 +34,20 @@ export const I18NEXT_CONFIG = {
|
||||
// Added since otherwise Android would crash - see here: https://stackoverflow.com/a/70521614 and https://www.i18next.com/misc/migration-guide
|
||||
useSuspense: false,
|
||||
defaultTransParent: Text
|
||||
},
|
||||
// For some reason this is how you pass options to i18next-fluent, per
|
||||
// https://github.com/i18next/i18next-fluent?tab=readme-ov-file#options
|
||||
i18nFormat: {
|
||||
fluentBundleOptions: {
|
||||
useIsolating: false,
|
||||
functions: {
|
||||
VOWORCON: ( [txt] ) => (
|
||||
"aeiou".indexOf( txt[0].toLowerCase( ) ) >= 0
|
||||
? "vow"
|
||||
: "con"
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
### result of performing an action on the accessibility element." We write
|
||||
### them in third person singular ending with a period.
|
||||
|
||||
# Header above user biography / user description on user profile
|
||||
# Header for a general description, e.g. of a user, or of iNaturalist itself
|
||||
ABOUT = ABOUT
|
||||
ABOUT-COLLECTION-PROJECTS = ABOUT COLLECTION PROJECTS
|
||||
ABOUT-INATURALIST = ABOUT INATURALIST
|
||||
@@ -26,17 +26,19 @@ ABOUT-THE-DQA = ABOUT THE DQA
|
||||
About-the-DQA-description = The Quality Grade summarizes the accuracy, precision, completeness, relevance, and appropriateness of an iNaturalist observation as biodiversity data. Some attributes are automatically determined, while others are subject to a vote by iNat users. iNaturalist shares licensed "Research Grade" observations with a number of data partners for use in science and conservation.
|
||||
ABOUT-TRADITIONAL-PROJECTS = ABOUT TRADITIONAL PROJECTS
|
||||
ABOUT-UMBRELLA-PROJECTS = ABOUT UMBRELLA PROJECTS
|
||||
Accept-community-identifications = Accept community identifications
|
||||
# Label for a taxon when a user prefers to see or hear the common name first
|
||||
accessible-comname-sciname = { $commonName } ({ $scientificName })
|
||||
# Label for a taxon when a user prefers to see or hear the scientific name first
|
||||
accessible-sciname-comname = { $scientificName } ({ $commonName })
|
||||
Account = Account
|
||||
ACTIVITY = ACTIVITY
|
||||
# Label for a button that adds a vote of agreement
|
||||
Add-agreement = Add agreement
|
||||
ADD-AN-ID = ADD AN ID
|
||||
ADD-COMMENT = ADD COMMENT
|
||||
Add-comment = Add comment
|
||||
Add-Date-Time = Add Date/Time
|
||||
# Label for a button that adds a vote of disagreement
|
||||
Add-disagreement = Add disagreement
|
||||
ADD-EVIDENCE = ADD EVIDENCE
|
||||
Add-favorite = Add favorite
|
||||
Add-Location = Add Location
|
||||
@@ -45,12 +47,17 @@ Add-Location = Add Location
|
||||
Add-observations = Add observations
|
||||
ADD-OPTIONAL-COMMENT = ADD OPTIONAL COMMENT
|
||||
Add-optional-notes = Add optional notes
|
||||
Add-this-ID = Add this identification
|
||||
# Date relationship created, shown on settings relationships screen
|
||||
Added-on-date = Added on { $date }
|
||||
# Hint for a button that adds a vote of agreement
|
||||
Adds-your-vote-of-agreement = Adds your vote of agreement
|
||||
# Hint for a button that adds a vote of disagreement
|
||||
Adds-your-vote-of-disagreement = Adds your vote of disagreement
|
||||
Affiliation = Affiliation: { $site }
|
||||
# Label for button that adds an identification of the same taxon as another identification
|
||||
Agree = Agree
|
||||
# Label for button that adds an identification of the same taxon as another identification
|
||||
AGREE = AGREE
|
||||
# Checkbox label that checks all of the consent agreements a user must make
|
||||
# before signing up
|
||||
Agree-to-all-of-the-above = Agree to all of the above
|
||||
AGREE-WITH-ID = AGREE WITH ID?
|
||||
Agree-with-ID-description = Would you like to agree with the ID and suggest the following identification?
|
||||
@@ -58,26 +65,27 @@ ALL = ALL
|
||||
All = All
|
||||
All-observations = All observations
|
||||
All-organisms = All organisms
|
||||
# license code
|
||||
# As in intellectual property rights over a photo or other creative work
|
||||
all-rights-reserved = all rights reserved
|
||||
# As in automated identification suggestions
|
||||
ALL-SUGGESTIONS = ALL SUGGESTIONS
|
||||
Almost-done = Almost done!
|
||||
Already-have-an-account = Already have an account? Log in
|
||||
An-Internet-connection-is-required = An Internet connection is required to load more observations.
|
||||
# Generic option in a menu of choices that indicates that any of the choices
|
||||
# would be acceptable
|
||||
Any = Any
|
||||
# Geoprivacy sheet descriptions
|
||||
Anyone-using-iNaturalist-can-see = Anyone using iNaturalist can see where this species was observed, and scientists can most easily use it for research.
|
||||
app-authorized-on-date = { $appName } (authorized on: { $date })
|
||||
APPLY-FILTERS = APPLY FILTERS
|
||||
Apply-filters = Apply filters
|
||||
# Month of April
|
||||
April = April
|
||||
# Short for Augmented Reality Camera. This is what we call the camera that
|
||||
# overlays identification suggestions in real time
|
||||
AR-Camera = AR Camera
|
||||
Are-you-a-teacher = Are you a teacher wanting to use iNaturalist with your students?
|
||||
Are-you-sure-you-want-to-sign-out = Are you sure you want to sign out? This will delete all your observations on this device. It will not affect any observations you've uploaded to iNaturalist.
|
||||
Arrow-down-selected = Arrow down selected
|
||||
Arrow-down-unselected = Arrow down unselected
|
||||
Arrow-up-selected = Arrow up selected
|
||||
Arrow-up-unselected = Arrow up unselected
|
||||
# Onboarding text on MyObservations: 0-10 observations
|
||||
As-you-upload-more-observations = As you upload more observations, others in our community may be able to help you identify them!
|
||||
attribution-cc-by = some rights reserved (CC BY)
|
||||
@@ -86,12 +94,10 @@ attribution-cc-by-nc-nd = some rights reserved (CC BY-NC-ND)
|
||||
attribution-cc-by-nc-sa = some rights reserved (CC BY-NC-SA)
|
||||
attribution-cc-by-nd = some rights reserved (CC BY-ND)
|
||||
attribution-cc-by-sa = some rights reserved (CC BY-SA)
|
||||
# Month of August
|
||||
August = August
|
||||
Automatically-update-my-content-for-taxon-changes = Automatically update my content for taxon changes
|
||||
# Returns user to login screen
|
||||
BACK-TO-LOGIN = BACK TO LOGIN
|
||||
# Header for inserting user description in settings profile tab
|
||||
Bio = Bio
|
||||
BLOG = BLOG
|
||||
# Accessibility label for bulk import / photo import button
|
||||
# These are used by screen readers to label actionable elements iOS: https://developer.apple.com/documentation/uikit/uiaccessibilityelement/1619577-accessibilitylabel
|
||||
@@ -103,67 +109,92 @@ By-exiting-your-observations-not-saved = By exiting, your observations will not
|
||||
By-exiting-your-photos-will-not-be-saved = By exiting, your photos will not be saved.
|
||||
By-exiting-your-recorded-sound-will-not-be-saved = By exiting, your recorded sound will not be saved.
|
||||
Camera = Camera
|
||||
Camera-flip = Camera-flip
|
||||
CANCEL = CANCEL
|
||||
Cancel = Cancel
|
||||
Captive-Cultivated = Captive/Cultivated
|
||||
# "Casual" Data quality grade
|
||||
Casual = Casual
|
||||
# Short label for the Creative Commons Attribution license
|
||||
CC-BY = CC BY
|
||||
# Short label for the Creative Commons Attribution-NonCommercial license
|
||||
CC-BY-NC = CC BY-NC
|
||||
# Short label for the Creative Commons Attribution-NonCommercial-NoDerivatives license
|
||||
CC-BY-NC-ND = CC BY-NC-ND
|
||||
# Short label for the Creative Commons Attribution-NonCommercial-ShareAlike license
|
||||
CC-BY-NC-SA = CC BY-NC-SA
|
||||
# Short label for the Creative Commons Attribution-NoDerivatives license
|
||||
CC-BY-ND = CC BY-ND
|
||||
# Short label for the Creative Commons Attribution-ShareAlike license
|
||||
CC-BY-SA = CC BY-SA
|
||||
# Short label for the Creative Commons Zero declaration
|
||||
CC0 = CC0
|
||||
# Label for a button that changes a selected date
|
||||
CHANGE-DATE = CHANGE DATE
|
||||
# Label for a button that changes a selected date
|
||||
Change-date = Change date
|
||||
# Label for a button that changes a selected end date
|
||||
CHANGE-END-DATE = CHANGE END DATE
|
||||
# Label for a button that changes a selected end date
|
||||
Change-end-date = Change end date
|
||||
Change-project = Change project
|
||||
# Label for a button that changes a selected start date
|
||||
CHANGE-START-DATE = CHANGE START DATE
|
||||
# Label for a button that changes a selected start date
|
||||
Change-start-date = Change start date
|
||||
Change-taxon = Change taxon
|
||||
# Button that changes the taxon filter on Explore
|
||||
Change-taxon-filter = Change taxon filter
|
||||
Change-user = Change user
|
||||
# Label for a button that cycles through zoom levels for the camera
|
||||
Change-zoom = Change zoom
|
||||
Check-this-box-if-you-want-to-apply-a-Creative-Commons = Check this box if you want to apply a Creative Commons
|
||||
# After pressing the reset password button
|
||||
# Notification that appears after pressing the reset password button
|
||||
CHECK-YOUR-EMAIL = CHECK YOUR EMAIL!
|
||||
Checkmark = Checkmark
|
||||
# Text for a button prompting the user to grant access to the gallery
|
||||
CHOOSE-PHOTOS = CHOOSE PHOTOS
|
||||
# Label for button that chooses a taxon
|
||||
Choose-taxon = Choose taxon
|
||||
# Label for a button that clears content, like the text entered in a text
|
||||
# field
|
||||
Clear = Clear
|
||||
# Label for a button that closes a window or popup
|
||||
Close = Close
|
||||
Close-add-observation-modal = Close add observation modal.
|
||||
# Accessibility label for a button that closes the permission request screen
|
||||
Close-permission-request-screen = Close permission request screen
|
||||
# Label for a button that closes a search interface
|
||||
Close-search = Close search
|
||||
Closes-new-observation-options = Closes new observation options.
|
||||
Closes-withdraw-id-sheet = Closes "Withdraw ID" sheet
|
||||
# Heading for a section that describes people and organizations that
|
||||
# collaborate with iNaturalist
|
||||
COLLABORATORS = COLLABORATORS
|
||||
Collection-Project = Collection Project
|
||||
# Button that combines multiple photos into a single observation
|
||||
Combine-Photos = Combine Photos
|
||||
# Title for a form that let's you enter a comment
|
||||
COMMENT = COMMENT
|
||||
# Accessibility label for a button that shows options for a comment
|
||||
# Label for a button that shows options for a comment
|
||||
Comment-options = Comment options
|
||||
# Label for a setting that shows the common name first
|
||||
Common-Name-Scientific-Name = Common Name (Scientific Name)
|
||||
Community-Guidelines = Community Guidelines
|
||||
Community-Moderation-Settings = Community Moderation Settings
|
||||
# Button that confirms a choice the user has made
|
||||
CONFIRM = CONFIRM
|
||||
Connect-with-other-naturalists = Connect with other naturalists and engage in conversations.
|
||||
Connected-Accounts = Connected Accounts
|
||||
Connection-problem-Please-try-again-later = Connection problem. Please try again later.
|
||||
CONTACT-SUPPORT = CONTACT SUPPORT
|
||||
CONTINUE = CONTINUE
|
||||
Coordinates-copied-to-keyboard = Coordinates copied to keyboard
|
||||
# Notification when coordinates have been copied
|
||||
Coordinates-copied-to-clipboard = Coordinates copied to clipboard
|
||||
# Button that copies coordinates to the clipboard
|
||||
Copy-coordinates = Copy Coordinates
|
||||
Copy-map-coordinates = Copy map coordinates
|
||||
# Right to control copies of a creative work; this string may be used as a
|
||||
# heading to describe general information about rights, attribution, and
|
||||
# licensing
|
||||
Copyright = Copyright
|
||||
Couldnt-create-comment = Couldn't create comment
|
||||
Couldnt-create-identification-error = Couldn't create identification { $error }
|
||||
Couldnt-create-identification-unknown-error = Couldn't create identification, Unknown Error.
|
||||
Couldnt-create-identification-unknown-error = Couldn't create identification, unknown error.
|
||||
CREATE-AN-ACCOUNT = CREATE AN ACCOUNT
|
||||
Create-an-observation-evidence = Create an observation with no evidence
|
||||
CREATE-YOUR-FIRST-OBSERVATION = CREATE YOUR FIRST OBSERVATION
|
||||
@@ -171,12 +202,13 @@ DATA-QUALITY = DATA QUALITY
|
||||
DATA-QUALITY-ASSESSMENT = DATA QUALITY ASSESSMENT
|
||||
Data-quality-assessment-can-taxon-still-be-confirmed-improved-based-on-the-evidence = Based on the evidence, can the Community Taxon still be improved?
|
||||
Data-quality-assessment-community-taxon-species-level-or-lower = Community taxon at species level or lower
|
||||
# Data Quality Assessment section label: whether or not the observation date is accurate
|
||||
Data-quality-assessment-date-is-accurate = Date is accurate
|
||||
# checklist test for Data Quality Assessment of Observation Details
|
||||
# Data Quality Assessment section label: whether or not the observation date was specified
|
||||
Data-quality-assessment-date-specified = Date specified
|
||||
Data-quality-assessment-description-casual = This observation has not met the conditions for Research Grade status.
|
||||
Data-quality-assessment-description-needs-id = This observation has not yet met the conditions for Research Grade status:
|
||||
# description for different quality grades in the DQA
|
||||
# Data Quality Assessment explanation when quality is Research Grade
|
||||
Data-quality-assessment-description-research = It can now be used for research and featured on other websites.
|
||||
Data-quality-assessment-evidence-of-organism = Evidence of organism
|
||||
Data-quality-assessment-has-photos-or-sounds = Has Photos or Sounds
|
||||
@@ -187,7 +219,7 @@ Data-quality-assessment-organism-is-wild = Organism is wild
|
||||
Data-quality-assessment-recent-evidence-of-organism = Recent evidence of an organism
|
||||
Data-quality-assessment-title-casual = This observation is Casual Grade
|
||||
Data-quality-assessment-title-needs-id = This observation Needs ID
|
||||
# declares the current data quality status of the observation
|
||||
# declares the current data quality status of the observation when quality is Research Grade
|
||||
Data-quality-assessment-title-research = This observation is Research Grade!
|
||||
Data-quality-casual-description = This observation needs more information verified to be considered verifiable
|
||||
Data-quality-needs-id-description = This observation needs more identifications to reach research grade
|
||||
@@ -207,9 +239,12 @@ Date-hours = { $count }h
|
||||
Date-minutes = { $count }m
|
||||
DATE-OBSERVED = DATE OBSERVED
|
||||
Date-observed = Date observed
|
||||
Date-observed-header-short = Observed
|
||||
DATE-OBSERVED-NEWEST = DATE OBSERVED - NEWEST TO OLDEST
|
||||
DATE-OBSERVED-OLDEST = DATE OBSERVED - OLDEST TO NEWEST
|
||||
# Label for controls over a range of dates
|
||||
Date-Range = Date Range
|
||||
# Label for controls over a range of dates
|
||||
DATE-RANGE = DATE RANGE
|
||||
# Used when displaying a relative time - in this case, shows an absolute date (e.g. 12/31/22)
|
||||
Date-short-format = MM/dd/yy
|
||||
@@ -222,18 +257,17 @@ DATE-UPLOADED-NEWEST = DATE UPLOADED - NEWEST TO OLDEST
|
||||
DATE-UPLOADED-OLDEST = DATE UPLOADED - OLDEST TO NEWEST
|
||||
# Used when displaying a relative time - in this case, X weeks ago (e.g. 3w = 3 weeks ago)
|
||||
Date-weeks = { $count }w
|
||||
Date_observed_header_short = Observed
|
||||
# Date formatting using date-fns
|
||||
# See complete list of formatting styles: https://date-fns.org/v2.29.3/docs/format
|
||||
datetime-format-short = M/d/yy h:mm a
|
||||
# Month of December
|
||||
December = December
|
||||
Default-Search-Place = Default Search Place
|
||||
DELETE = DELETE
|
||||
Delete-all-observations = Delete all observations
|
||||
Delete-comment = Delete comment
|
||||
DELETE-COMMENT-QUESTION = DELETE COMMENT?
|
||||
DELETE-OBSERVATION = DELETE OBSERVATION?
|
||||
DELETE-COMMENT--question = DELETE COMMENT?
|
||||
Delete-observation = Delete observation
|
||||
DELETE-OBSERVATION--question = DELETE OBSERVATION?
|
||||
# Button label or accessibility label for an element that deletes a photo
|
||||
Delete-photo = Delete photo
|
||||
Delete-sound = Delete sound
|
||||
@@ -248,28 +282,29 @@ Deleting-x-of-y-observations =
|
||||
# Tab label or section title for content that describes further details, e.g.
|
||||
# the details of an observation
|
||||
DETAILS = DETAILS
|
||||
# Button that disables the camera's flash
|
||||
Disable-flash = Disable flash
|
||||
# Button that discards changes or an item, e.g. a photo
|
||||
DISCARD = DISCARD
|
||||
# Button that discards all items, e.g. imported photos
|
||||
DISCARD-ALL = DISCARD ALL
|
||||
# Button that discards changes
|
||||
DISCARD-CHANGES = DISCARD CHANGES
|
||||
DISCARD-FILTER-CHANGES = DISCARD FILTER CHANGES
|
||||
DISCARD-MEDIA = DISCARD MEDIA?
|
||||
DISCARD-MEDIA--question = DISCARD MEDIA?
|
||||
DISCARD-OBSERVATION = DISCARD OBSERVATION
|
||||
DISCARD-PHOTOS = DISCARD PHOTOS?
|
||||
DISCARD-PHOTOS--question = DISCARD PHOTOS?
|
||||
# Label for a button that discards a sound recording
|
||||
DISCARD-RECORDING = DISCARD RECORDING
|
||||
# Header of a popup confirming that the user wants to discard a sound
|
||||
# recording
|
||||
DISCARD-SOUND-header = DISCARD SOUND?
|
||||
DISCARD-SOUND--question = DISCARD SOUND?
|
||||
DISCARD-X-OBSERVATIONS =
|
||||
{ $count ->
|
||||
[one] DISCARD OBSERVATION
|
||||
*[other] DISCARD { $count } OBSERVATIONS
|
||||
}
|
||||
DISMISS = DISMISS
|
||||
Display = Display
|
||||
Display-Name = Display Name
|
||||
Do-not-collect-stability-and-usage-data-using-third-party-services = Do not collect stability and usage data using third-party services
|
||||
DONATE = DONATE
|
||||
DONATE-TO-INATURALIST = DONATE TO INATURALIST
|
||||
Donate-to-iNaturalist = Donate to iNaturalist
|
||||
@@ -277,6 +312,7 @@ Donate-to-iNaturalist = Donate to iNaturalist
|
||||
DONE = DONE
|
||||
Dont-have-an-account = Don't have an account? Sign up
|
||||
During-app-start-no-model-found = During app start there was no computer vision model found. There will be no AR camera.
|
||||
# Button for editing something
|
||||
Edit = Edit
|
||||
EDIT-COMMENT = EDIT COMMENT
|
||||
Edit-comment = Edit comment
|
||||
@@ -284,12 +320,13 @@ EDIT-LOCATION = EDIT LOCATION
|
||||
# Label for interactive element that takes you to a location choosing screen
|
||||
Edit-location = Edit location
|
||||
Edit-Observation = Edit Observation
|
||||
# Label for button that edits an observation's taxon
|
||||
Edits-this-observations-taxon = Edits this observation's taxon
|
||||
EMAIL = EMAIL
|
||||
# Appears above the email text field
|
||||
Email = email
|
||||
EMAIL-DEBUG-LOGS = EMAIL DEBUG LOGS
|
||||
Email-Notifications = Email Notifications
|
||||
# Button that enables the camera's flash
|
||||
Enable-flash = Enable flash
|
||||
# Indicates a species only occurs in a specific place
|
||||
Endemic = Endemic
|
||||
# TODO this and many other uses of placeables are not currently translatable
|
||||
# without knowing the vowel/consonant state of the first letter of the
|
||||
@@ -316,12 +353,12 @@ EXPLORE-IDENTIFIERS = EXPLORE IDENTIFIERS
|
||||
EXPLORE-OBSERVATIONS = EXPLORE OBSERVATIONS
|
||||
EXPLORE-OBSERVERS = EXPLORE OBSERVERS
|
||||
EXPLORE-SPECIES = EXPLORE SPECIES
|
||||
External-Applications = External Applications
|
||||
Failed-to-delete-sound = Failed to delete sound
|
||||
# Error message with log in fails
|
||||
Failed-to-log-in = Failed to log in
|
||||
# Header for featured projects
|
||||
FEATURED = FEATURED
|
||||
# Month of February
|
||||
February = February
|
||||
Fetching-location = Fetching location...
|
||||
Filter = Filter
|
||||
@@ -341,8 +378,9 @@ Flag-Item-Other-Input-Hint = Specify the reason you're flagging this item
|
||||
# Status when an item has been flagged
|
||||
Flagged = Flagged
|
||||
Flash = flash
|
||||
# Label for a button that toggles between the front and back cameras
|
||||
Flip-camera = Flip camera
|
||||
FOLLOW = FOLLOW
|
||||
Following = Following
|
||||
# Forgot password link
|
||||
Forgot-Password = Forgot Password
|
||||
GEOPRIVACY = GEOPRIVACY
|
||||
@@ -391,8 +429,6 @@ IMPORT-X-OBSERVATIONS =
|
||||
# Identification category
|
||||
improving--identification = Improving
|
||||
INATURALIST-ACCOUNT-SETTINGS = INATURALIST ACCOUNT SETTINGS
|
||||
iNaturalist-Activity-Notifications = iNaturalist Activity Notifications
|
||||
iNaturalist-Applications = iNaturalist Applications
|
||||
iNaturalist-can-save-photos-you-take-in-the-app-to-your-devices-gallery = iNaturalist can save photos you take in the app to your device’s gallery.
|
||||
INATURALIST-COMMUNITY = INATURALIST COMMUNITY
|
||||
INATURALIST-FORUM = INATURALIST FORUM
|
||||
@@ -408,7 +444,6 @@ iNaturalist-is-supported-by-community = iNaturalist is supported by our amazing
|
||||
iNaturalist-mission-is-to-connect = iNaturalist's mission is to connect people to nature and advance biodiversity science and conservation.
|
||||
INATURALIST-MISSION-VISION = INATURALIST'S MISSION & VISION
|
||||
INATURALIST-NETWORK = INATURALIST NETWORK
|
||||
iNaturalist-Network-Affiliation = iNaturalist Network Affiliation
|
||||
INATURALIST-SETTINGS = INATURALIST SETTINGS
|
||||
# Label for the role a user plays on iNaturalist, e.g. "INATURALIST STAFF"
|
||||
# or "INATURALIST CURATOR". Since the name "INATURALIST" should not be
|
||||
@@ -429,6 +464,7 @@ Internet-Connection-Required = Internet Connection Required
|
||||
Intl-number = { $val }
|
||||
Introduced = Introduced
|
||||
Introduced-to-place = Introduced to { $place }
|
||||
# Month of January
|
||||
January = January
|
||||
JOIN = JOIN
|
||||
JOIN-PROJECT = JOIN PROJECT
|
||||
@@ -442,9 +478,10 @@ JOURNAL-POSTS-WITHOUT-NUMBER =
|
||||
[one] JOURNAL POST
|
||||
*[other] JOURNAL POSTS
|
||||
}
|
||||
# Month of July
|
||||
July = July
|
||||
# Month of June
|
||||
June = June
|
||||
Language-Locale = Language/Locale
|
||||
# Shows date user last active on iNaturalist on user profile
|
||||
Last-Active-date = Last Active: { $date }
|
||||
# Latitude, longitude on a single line on a single line
|
||||
@@ -458,7 +495,6 @@ LEAVE = LEAVE
|
||||
LEAVE-PROJECT = LEAVE PROJECT
|
||||
LEAVE-US-A-REVIEW = LEAVE US A REVIEW!
|
||||
LICENSES = LICENSES
|
||||
Licensing = Licensing
|
||||
List-view = List view
|
||||
Loading-iNaturalists-AR-Camera = Loading iNaturalist's AR Camera
|
||||
LOCATION = LOCATION
|
||||
@@ -482,9 +518,11 @@ Lowest = Lowest
|
||||
LOWEST-RANK = LOWEST RANK
|
||||
MAP = MAP
|
||||
Map-Area = Map Area
|
||||
# Month of March
|
||||
March = March
|
||||
# Identification category
|
||||
maverick--identification = Maverick
|
||||
# Month of May
|
||||
May = May
|
||||
MEDIA = MEDIA
|
||||
MEMBERS-WITHOUT-NUMBER =
|
||||
@@ -502,36 +540,37 @@ MONTHS = MONTHS
|
||||
More-info = More info
|
||||
MOST-FAVED = MOST FAVED
|
||||
Most-faved = Most faved
|
||||
Names = Names
|
||||
Native = Native
|
||||
Native-to-place = Native to { $place }
|
||||
Navigates-to-add-identification = Navigates to add identification.
|
||||
Navigates-to-AR-camera = Navigates to AR camera.
|
||||
Navigates-to-bulk-importer = Navigates to bulk importer.
|
||||
Navigates-to-camera = Navigates to camera.
|
||||
Navigates-to-explore = Navigates to explore.
|
||||
Navigates-to-AR-camera = Navigates to AR camera
|
||||
Navigates-to-bulk-importer = Navigates to bulk importer
|
||||
Navigates-to-camera = Navigates to camera
|
||||
Navigates-to-explore = Navigates to explore
|
||||
Navigates-to-notifications = Navigates to notifications
|
||||
Navigates-to-observation-details = Navigates to observation details screen.
|
||||
Navigates-to-observation-edit-screen = Navigate to observation edit screen.
|
||||
Navigates-to-observations = Navigates to observations.
|
||||
Navigates-to-photo-importer = Navigate to photo importer.
|
||||
Navigates-to-previous-screen = Navigate to previous screen
|
||||
Navigates-to-project-details = Navigate to project details
|
||||
Navigates-to-sound-recorder = Navigates to sound recorder.
|
||||
Navigates-to-suggest-identification = Navigates to suggest identification.
|
||||
Navigates-to-suggestions = Navigates to suggestions
|
||||
Navigates-to-observation-details = Navigates to observation details screen
|
||||
Navigates-to-observation-edit-screen = Navigate to observation edit screen
|
||||
Navigates-to-photo-importer = Navigates to photo importer
|
||||
Navigates-to-previous-screen = Navigates to previous screen
|
||||
Navigates-to-project-details = Navigates to project details
|
||||
Navigates-to-sound-recorder = Navigates to sound recorder
|
||||
Navigates-to-suggest-identification = Navigates to suggest identification
|
||||
Navigates-to-taxon-details = Navigates to taxon details
|
||||
Navigates-to-user-profile = Navigates to user profile.
|
||||
Navigates-to-user-profile = Navigates to user profile
|
||||
# Label for button that takes you to your observations
|
||||
Navigates-to-your-observations = Navigates to your observations
|
||||
# Header for nearby projects
|
||||
NEARBY = NEARBY
|
||||
Nearby = Nearby
|
||||
NEARBY-SUGGESTIONS = NEARBY SUGGESTIONS
|
||||
Needs-ID = Needs ID
|
||||
# Heading when creating a new observation
|
||||
New-Observation = New Observation
|
||||
# Sort order, refers to newest or oldest date
|
||||
Newest-to-oldest = Newest to oldest
|
||||
Next-observation = Next observation
|
||||
No-Location = No Location
|
||||
No-Media = No Media
|
||||
# As in a machine learning model that powers automated suggestions
|
||||
No-model-found = No model found
|
||||
No-Notifications-Found = You have no notifications! Get started by creating your own observations.
|
||||
No-projects-match-that-search = No projects match that search
|
||||
@@ -549,6 +588,7 @@ Notifications = Notifications
|
||||
notifications-user-added-comment-to-observation-by-you = <0>{ $userName }</0> added a comment to an observation by you
|
||||
# notification when someone adds an identification to your observation
|
||||
notifications-user-added-identification-to-observation-by-you = <0>{ $userName }</0> added an identification to an observation by you
|
||||
# Month of November
|
||||
November = November
|
||||
Obervations-must-be-manually-added = Observations must be manually added to a traditional project, either during the upload stage or after the observation has been shared to iNaturalist. A user must also join a traditional project in order to add their observations to it.
|
||||
Obscured = Obscured
|
||||
@@ -566,6 +606,8 @@ Observation-with-no-evidence = Observation with no evidence
|
||||
Observations = Observations
|
||||
Observations-created-on-iNaturalist = Observations created on iNaturalist are used by scientists around the world.
|
||||
Observations-View = Observations View
|
||||
# Might be used when the number is represented using an image or other
|
||||
# element, not text
|
||||
OBSERVATIONS-WITHOUT-NUMBER =
|
||||
{ $count ->
|
||||
[one] OBSERVATION
|
||||
@@ -573,6 +615,7 @@ OBSERVATIONS-WITHOUT-NUMBER =
|
||||
}
|
||||
# Onboarding text on MyObservations: Onboarding text on MyObservations: 11-50 observations
|
||||
Observations-you-upload-to-iNaturalist = Observations you upload to iNaturalist can be used by scientists and researchers worldwide.
|
||||
# Button that starts a new observation
|
||||
Observe = Observe
|
||||
# Title of screen asking for permission to access the gallery
|
||||
Observe-and-identify-organisms-from-your-gallery = Observe and identify organisms from your gallery
|
||||
@@ -581,7 +624,9 @@ Observe-and-identify-organisms-in-real-time-with-your-camera = Observe and ident
|
||||
# Text for a button prompting the user to grant access to the camera
|
||||
OBSERVE-ORGANISMS = OBSERVE ORGANISMS
|
||||
Observers = Observers
|
||||
# Section in Explore that shows people who added observations given a set of search filters
|
||||
Observers-View = Observers View
|
||||
# Month of October
|
||||
October = October
|
||||
Offensive-Inappropriate = Offensive/Inappropriate
|
||||
Offensive-Inappropriate-Examples = Misleading or illegal content, racial or ethnic slurs, etc. For more on our defintion of "appropriate," see the FAQ.
|
||||
@@ -589,8 +634,10 @@ Offline-DQA-description = The DQA may not be accurate. Check your internet conne
|
||||
Offline-No-Notifications = Cannot fetch notifications at this time.
|
||||
# Generic confirmation, e.g. button on a warning alert
|
||||
OK = OK
|
||||
# Sort order, refers to newest or oldest date
|
||||
Oldest-to-newest = Oldest to newest
|
||||
One-last-step = One last step!
|
||||
# Adjective, as in geoprivacy
|
||||
Open = Open
|
||||
Open-drawer = Open drawer
|
||||
OPEN-EMAIL = OPEN EMAIL
|
||||
@@ -631,15 +678,14 @@ Please-try-again-when-you-are-connected-to-the-internet = Please try again when
|
||||
# Help text for beginning a sound recording
|
||||
Press-record-to-start = Press record to start
|
||||
Previous-observation = Previous observation
|
||||
Prioritize-common-names-used-in-this-place = Prioritize common names used in this place.
|
||||
Privacy = Privacy
|
||||
Privacy-Policy = Privacy Policy
|
||||
Private = Private
|
||||
Profile-Picture = Profile Picture
|
||||
# As in an iNat project, a collection of observations or observation search filters
|
||||
PROJECT = PROJECT
|
||||
PROJECT-REQUIREMENTS = PROJECT REQUIREMENTS
|
||||
Project-Settings = Project Settings
|
||||
# As in iNat project, collections of observations or observation search filters
|
||||
PROJECTS = PROJECTS
|
||||
# As in iNat projects, collections of observations or observation search filters
|
||||
Projects = Projects
|
||||
QUALITY-GRADE = QUALITY GRADE
|
||||
# Shortened display of an observation's quality grade (used when displayed in a badge) - in this case, Casual
|
||||
@@ -689,6 +735,7 @@ Ranks-VARIETY = VARIETY
|
||||
Ranks-ZOOSECTION = ZOOSECTION
|
||||
Ranks-ZOOSUBSECTION = ZOOSUBSECTION
|
||||
Read-more-on-Wikipedia = Read more on Wikipedia
|
||||
# Heading for the sound recorder
|
||||
RECORD-NEW-SOUND = RECORD NEW SOUND
|
||||
# Title of screen asking for permission to access the microphone
|
||||
Record-organism-sounds-with-the-microphone = Record organism sounds with the microphone
|
||||
@@ -697,12 +744,20 @@ RECORD-SOUND = RECORD SOUND
|
||||
Record-sounds = Record sounds with your microphone
|
||||
# Imperative verb for recording a sound
|
||||
Record-verb = Record
|
||||
# Status while recording a sound
|
||||
Recording-sound = Recording sound
|
||||
Recording-stopped-Tap-play-the-current-recording = Recording stopped. Tap play the current recording.
|
||||
REDO-SEARCH-IN-MAP-AREA = REDO SEARCH IN MAP AREA
|
||||
# Label for a button that removes a vote of agreement
|
||||
Remove-agreement = Remove agreement
|
||||
# Label for a button that removes a vote of disagreement
|
||||
Remove-disagreement = Remove disagreement
|
||||
Remove-favorite = Remove favorite
|
||||
Remove-Photos = Remove Photos
|
||||
Remove-Relationship = Remove Relationship
|
||||
# Hint for a button that removes a vote of agreement
|
||||
Removes-your-vote-of-agreement = Removes your vote of agreement
|
||||
# Hint for a button that removes a vote of disagreement
|
||||
Removes-your-vote-of-disagreement = Removes your vote of disagreement
|
||||
# Quality grade option
|
||||
Research-Grade = Research Grade
|
||||
Reset = Reset
|
||||
@@ -725,7 +780,6 @@ REVIEW-INATURALIST = REVIEW INATURALIST
|
||||
# reviewed the observations or not
|
||||
REVIEWED = REVIEWED
|
||||
Reviewed-observations-only = Reviewed observations only
|
||||
Revoke = Revoke
|
||||
# Label for the satellite map type
|
||||
Satellite--map-type = Satellite
|
||||
# Label for a button that persists something
|
||||
@@ -741,7 +795,9 @@ Saved-Observation = Saved observation, in queue to upload
|
||||
Scan-the-area-around-you-for-organisms = Scan the area around you for organisms.
|
||||
Scientific-Name = Scientific Name
|
||||
Scientific-Name-Common-Name = Scientific Name (Common Name)
|
||||
# Title for a search interface
|
||||
SEARCH = SEARCH
|
||||
# Title for a search interface
|
||||
Search = Search
|
||||
SEARCH-FOR-A-LOCATION = SEARCH FOR A LOCATION
|
||||
Search-for-a-project = Search for a project
|
||||
@@ -770,6 +826,7 @@ Select-the-identification-you-want-to-add = Select the identification you want t
|
||||
Select-user = Select user
|
||||
Selects-iconic-taxon-X-for-identification = Selects iconic taxon { $iconicTaxon } for identification.
|
||||
Separate-Photos = Separate Photos
|
||||
# Month of September
|
||||
September = September
|
||||
SETTINGS = SETTINGS
|
||||
Settings = Settings
|
||||
@@ -780,6 +837,8 @@ Share-map = Share map
|
||||
SHOP-INATURALIST-MERCH = SHOP INATURALIST MERCH
|
||||
Shop-iNaturalist-Merch = Shop iNaturalist Merch
|
||||
Show-observation-options = Show observation options.
|
||||
# Label for button that shows identification suggestions
|
||||
Shows-identification-suggestions = Shows identification suggestions
|
||||
Shows-iNaturalist-bird-logo = Shows iNaturalist bird logo.
|
||||
Sign-out = Sign out
|
||||
Some-data-privacy-laws = Some data privacy laws, like the European Union's General Data Protection Regulation (GDPR), require explicit consent to transfer personal information from their jurisdictions to other jurisdictions where the legal protection of this information is not considered adequate. As of 2020, the European Union no longer considers the United States to be a jurisdiction that provides adequate legal protection of personal information, specifically because of the possibility of the US government surveilling data entering the US. It is possible other jurisdictions may have the same opinion.
|
||||
@@ -840,7 +899,6 @@ TAXON-NAMES-DISPLAY = TAXON NAMES DISPLAY
|
||||
TAXONOMIC-RANKS = TAXONOMIC RANKS
|
||||
# Header for a block of text describing a taxon's taxonomy
|
||||
TAXONOMY-header = TAXONOMY
|
||||
Taxonomy-Settings = Taxonomy Settings
|
||||
TEACHERS = TEACHERS
|
||||
Teachers-Guide = Teachers' Guide
|
||||
TEAM = TEAM
|
||||
@@ -848,27 +906,21 @@ Terms-of-Use = Terms of Use
|
||||
Text-Box-to-Describe-Reason-for-Flag = Text box to describe reason for flag.
|
||||
The-exact-location-will-be-hidden = The exact location will be hidden publicly, and instead generalized to a larger area. (Threatened and endangered species are automatically obscured).
|
||||
The-iNaturalist-Network = The iNaturalist network is a collection of localized websites that are fully connected to the global iNaturalist community. Network sites are supported by local institutions that promote local use and facilitate the use of data from iNaturalist to benefit local biodiversity.
|
||||
The-iNaturalist-Network-is-a-collection-of-localized-websites = The iNaturalist Network is a collection of localized websites that are fully connected to the global iNaturalist community. Network sites are supported by local institutions that have signed an agreement with iNaturalist to promote local use and benefit local biodiversity. They have access to true coordinates from their countries that are automatically obscured from public view in order to protect threatened species. Your username and password works on all sites that are part of the iNaturalist Network. If you choose to affiliate with a Network site, the local institutions that operate each site will also have access to your email address (only to communicate with you about site activities) and access to the true coordinates for observations that are publicly obscured or private. Note: Please do not experimentally change your affiliation if you have more than 1000 observations.
|
||||
The-iNaturalist-team-has-collaborated = The iNaturalist team has collaborated with...
|
||||
The-location-will-not-be-visible = The location will not be visible to others, which means it may be difficult to identify.
|
||||
There-is-no-way = There is no way to have an iNaturalist account without storing personal information, so the only way to revoke this consent is to delete your account.
|
||||
# Wild status sheet descriptions
|
||||
This-is-a-wild-organism = This is a wild organism and wasn't placed in this location by humans.
|
||||
This-is-how-all-taxon-names-will-be-displayed-to-you-across-iNaturalist = This is how all taxon names will be displayed to you across iNaturalist
|
||||
This-is-how-taxon-names-will-be-displayed = This is how all taxon names will be displayed to you across iNaturalist:
|
||||
This-observer-has-opted-out-of-the-Community-Taxon = This observer has opted out of the Community Taxon
|
||||
This-organism-was-placed-by-humans = This organism was placed in this location by humans. This applies to things like garden plants, pets, and zoo animals.
|
||||
This-sets-your-language-and-date-formatting-preferences-across-iNaturalist = This sets your language and date formatting preferences across iNaturalist based on your locale.
|
||||
This-will-be-your-default-place-for-all-searches-in-Explore-and-Identify = This will be your default place for all searches in Explore and Identify.
|
||||
To-access-all-other-settings = To access all other account settings, click here:
|
||||
To-learn-more-about-what-information = To learn more about what information we collect and how we use it, please see our Privacy Policy and our Terms of Use.
|
||||
To-sync-your-observations-to-iNaturalist = To sync your observations to iNaturalist, please log in.
|
||||
Toggle-map-type = Toggle map type
|
||||
TOP-ID-SUGGESTION = TOP ID SUGGESTION
|
||||
Traditional-Project = Traditional Project
|
||||
Trust-with-hidden-coordinates = Trust with hidden coordinates
|
||||
Umbrella-Project = Umbrella Project
|
||||
Unblock = Unblock
|
||||
UNFOLLOW = UNFOLLOW
|
||||
UNFOLLOW-USER = UNFOLLOW USER?
|
||||
# Text to show when a taxon or identification is unknown or missing
|
||||
@@ -878,7 +930,6 @@ Unknown--user = Unknown
|
||||
# Generic error message
|
||||
Unknown-error = Unknown error
|
||||
Unknown-organism = Unknown organism
|
||||
Unmute = Unmute
|
||||
Unreviewed-observations-only = Unreviewed observations only
|
||||
Upload-Complete = Upload Complete
|
||||
Upload-in-progress = Upload in progress
|
||||
@@ -911,7 +962,6 @@ Use-your-devices-microphone-to-record = Use your device’s microphone to record
|
||||
USER = USER
|
||||
User = User { $userHandle }
|
||||
USERNAME = USERNAME
|
||||
Username = Username
|
||||
# Appears above the text fields
|
||||
USERNAME-OR-EMAIL = USERNAME OR EMAIL
|
||||
Using-iNaturalist-requires-the-storage = Using iNaturalist requires the storage of personal information like your email address, all iNaturalist data is stored in the United States, and we cannot be sure what legal jurisdiction you are in when you are using iNaturalist, so in order to comply with privacy laws like the GDPR, you must acknowledge that you understand and accept this risk and consent to transferring your personal information to iNaturalist's servers in the US.
|
||||
@@ -926,6 +976,8 @@ View-photo = View photo
|
||||
View-photo-licensing-info = View photo licensing info
|
||||
VIEW-PROJECT-REQUIREMENTS = VIEW PROJECT REQUIREMENTS
|
||||
VIEW-PROJECTS = VIEW PROJECTS
|
||||
# Label for a button that shows identification suggestions for an observation
|
||||
# or photo
|
||||
View-suggestions = View suggestions
|
||||
VIEW-TEACHERS-GUIDE = VIEW TEACHERS' GUIDE
|
||||
# Title for a notice informing the user that they are viewing offline
|
||||
@@ -939,8 +991,6 @@ Welcome-to-iNaturalist = Welcome to iNaturalist!
|
||||
Welcome-user = <0>Welcome back,</0><1>{ $userHandle }</1>
|
||||
WHAT-IS-INATURALIST = WHAT IS INATURALIST?
|
||||
Whats-more-by-recording = What's more, by recording and sharing your observations, you'll create research-quality data for scientists working to better understand and protect nature. So if you like recording your findings from the outdoors, or if you just like learning about life, join us!
|
||||
Which-traditional-projects-can-add-your-observations = Which traditional projects can add your observations?
|
||||
Who-can-add-observation-fields-to-my-observations = Who can add observation fields to my observations?
|
||||
WIKIPEDIA = WIKIPEDIA
|
||||
Wild = Wild
|
||||
WILD-STATUS = WILD STATUS
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"ABOUT": {
|
||||
"comment": "Header above user biography / user description on user profile",
|
||||
"comment": "Header for a general description, e.g. of a user, or of iNaturalist itself",
|
||||
"val": "ABOUT"
|
||||
},
|
||||
"ABOUT-COLLECTION-PROJECTS": "ABOUT COLLECTION PROJECTS",
|
||||
@@ -12,7 +12,6 @@
|
||||
"About-the-DQA-description": "The Quality Grade summarizes the accuracy, precision, completeness, relevance, and appropriateness of an iNaturalist observation as biodiversity data. Some attributes are automatically determined, while others are subject to a vote by iNat users. iNaturalist shares licensed \"Research Grade\" observations with a number of data partners for use in science and conservation.",
|
||||
"ABOUT-TRADITIONAL-PROJECTS": "ABOUT TRADITIONAL PROJECTS",
|
||||
"ABOUT-UMBRELLA-PROJECTS": "ABOUT UMBRELLA PROJECTS",
|
||||
"Accept-community-identifications": "Accept community identifications",
|
||||
"accessible-comname-sciname": {
|
||||
"comment": "Label for a taxon when a user prefers to see or hear the common name first",
|
||||
"val": "{ $commonName } ({ $scientificName })"
|
||||
@@ -21,12 +20,19 @@
|
||||
"comment": "Label for a taxon when a user prefers to see or hear the scientific name first",
|
||||
"val": "{ $scientificName } ({ $commonName })"
|
||||
},
|
||||
"Account": "Account",
|
||||
"ACTIVITY": "ACTIVITY",
|
||||
"Add-agreement": {
|
||||
"comment": "Label for a button that adds a vote of agreement",
|
||||
"val": "Add agreement"
|
||||
},
|
||||
"ADD-AN-ID": "ADD AN ID",
|
||||
"ADD-COMMENT": "ADD COMMENT",
|
||||
"Add-comment": "Add comment",
|
||||
"Add-Date-Time": "Add Date/Time",
|
||||
"Add-disagreement": {
|
||||
"comment": "Label for a button that adds a vote of disagreement",
|
||||
"val": "Add disagreement"
|
||||
},
|
||||
"ADD-EVIDENCE": "ADD EVIDENCE",
|
||||
"Add-favorite": "Add favorite",
|
||||
"Add-Location": "Add Location",
|
||||
@@ -36,15 +42,27 @@
|
||||
},
|
||||
"ADD-OPTIONAL-COMMENT": "ADD OPTIONAL COMMENT",
|
||||
"Add-optional-notes": "Add optional notes",
|
||||
"Add-this-ID": "Add this identification",
|
||||
"Added-on-date": {
|
||||
"comment": "Date relationship created, shown on settings relationships screen",
|
||||
"val": "Added on { $date }"
|
||||
"Adds-your-vote-of-agreement": {
|
||||
"comment": "Hint for a button that adds a vote of agreement",
|
||||
"val": "Adds your vote of agreement"
|
||||
},
|
||||
"Adds-your-vote-of-disagreement": {
|
||||
"comment": "Hint for a button that adds a vote of disagreement",
|
||||
"val": "Adds your vote of disagreement"
|
||||
},
|
||||
"Affiliation": "Affiliation: { $site }",
|
||||
"Agree": "Agree",
|
||||
"AGREE": "AGREE",
|
||||
"Agree-to-all-of-the-above": "Agree to all of the above",
|
||||
"Agree": {
|
||||
"comment": "Label for button that adds an identification of the same taxon as another identification",
|
||||
"val": "Agree"
|
||||
},
|
||||
"AGREE": {
|
||||
"comment": "Label for button that adds an identification of the same taxon as another identification",
|
||||
"val": "AGREE"
|
||||
},
|
||||
"Agree-to-all-of-the-above": {
|
||||
"comment": "Checkbox label that checks all of the consent agreements a user must make\nbefore signing up",
|
||||
"val": "Agree to all of the above"
|
||||
},
|
||||
"AGREE-WITH-ID": "AGREE WITH ID?",
|
||||
"Agree-with-ID-description": "Would you like to agree with the ID and suggest the following identification?",
|
||||
"ALL": "ALL",
|
||||
@@ -52,29 +70,36 @@
|
||||
"All-observations": "All observations",
|
||||
"All-organisms": "All organisms",
|
||||
"all-rights-reserved": {
|
||||
"comment": "license code",
|
||||
"comment": "As in intellectual property rights over a photo or other creative work",
|
||||
"val": "all rights reserved"
|
||||
},
|
||||
"ALL-SUGGESTIONS": "ALL SUGGESTIONS",
|
||||
"ALL-SUGGESTIONS": {
|
||||
"comment": "As in automated identification suggestions",
|
||||
"val": "ALL SUGGESTIONS"
|
||||
},
|
||||
"Almost-done": "Almost done!",
|
||||
"Already-have-an-account": "Already have an account? Log in",
|
||||
"An-Internet-connection-is-required": "An Internet connection is required to load more observations.",
|
||||
"Any": "Any",
|
||||
"Any": {
|
||||
"comment": "Generic option in a menu of choices that indicates that any of the choices\nwould be acceptable",
|
||||
"val": "Any"
|
||||
},
|
||||
"Anyone-using-iNaturalist-can-see": {
|
||||
"comment": " Geoprivacy sheet descriptions",
|
||||
"val": "Anyone using iNaturalist can see where this species was observed, and scientists can most easily use it for research."
|
||||
},
|
||||
"app-authorized-on-date": "{ $appName } (authorized on: { $date })",
|
||||
"APPLY-FILTERS": "APPLY FILTERS",
|
||||
"Apply-filters": "Apply filters",
|
||||
"April": "April",
|
||||
"AR-Camera": "AR Camera",
|
||||
"April": {
|
||||
"comment": "Month of April",
|
||||
"val": "April"
|
||||
},
|
||||
"AR-Camera": {
|
||||
"comment": "Short for Augmented Reality Camera. This is what we call the camera that\noverlays identification suggestions in real time",
|
||||
"val": "AR Camera"
|
||||
},
|
||||
"Are-you-a-teacher": "Are you a teacher wanting to use iNaturalist with your students?",
|
||||
"Are-you-sure-you-want-to-sign-out": "Are you sure you want to sign out? This will delete all your observations on this device. It will not affect any observations you've uploaded to iNaturalist.",
|
||||
"Arrow-down-selected": "Arrow down selected",
|
||||
"Arrow-down-unselected": "Arrow down unselected",
|
||||
"Arrow-up-selected": "Arrow up selected",
|
||||
"Arrow-up-unselected": "Arrow up unselected",
|
||||
"As-you-upload-more-observations": {
|
||||
"comment": "Onboarding text on MyObservations: 0-10 observations",
|
||||
"val": "As you upload more observations, others in our community may be able to help you identify them!"
|
||||
@@ -85,16 +110,14 @@
|
||||
"attribution-cc-by-nc-sa": "some rights reserved (CC BY-NC-SA)",
|
||||
"attribution-cc-by-nd": "some rights reserved (CC BY-ND)",
|
||||
"attribution-cc-by-sa": "some rights reserved (CC BY-SA)",
|
||||
"August": "August",
|
||||
"Automatically-update-my-content-for-taxon-changes": "Automatically update my content for taxon changes",
|
||||
"August": {
|
||||
"comment": "Month of August",
|
||||
"val": "August"
|
||||
},
|
||||
"BACK-TO-LOGIN": {
|
||||
"comment": "Returns user to login screen",
|
||||
"val": "BACK TO LOGIN"
|
||||
},
|
||||
"Bio": {
|
||||
"comment": "Header for inserting user description in settings profile tab",
|
||||
"val": "Bio"
|
||||
},
|
||||
"BLOG": "BLOG",
|
||||
"Bulk-importer": {
|
||||
"comment": "Accessibility label for bulk import / photo import button\nThese are used by screen readers to label actionable elements iOS: https://developer.apple.com/documentation/uikit/uiaccessibilityelement/1619577-accessibilitylabel\niOS Guidelines \"A string that succinctly identifies the accessibility element.\" Starts with capital letter, no ending punctuation.",
|
||||
@@ -106,26 +129,71 @@
|
||||
"By-exiting-your-photos-will-not-be-saved": "By exiting, your photos will not be saved.",
|
||||
"By-exiting-your-recorded-sound-will-not-be-saved": "By exiting, your recorded sound will not be saved.",
|
||||
"Camera": "Camera",
|
||||
"Camera-flip": "Camera-flip",
|
||||
"CANCEL": "CANCEL",
|
||||
"Cancel": "Cancel",
|
||||
"Captive-Cultivated": "Captive/Cultivated",
|
||||
"Casual": "Casual",
|
||||
"CC-BY": "CC BY",
|
||||
"CC-BY-NC": "CC BY-NC",
|
||||
"CC-BY-NC-ND": "CC BY-NC-ND",
|
||||
"CC-BY-NC-SA": "CC BY-NC-SA",
|
||||
"CC-BY-ND": "CC BY-ND",
|
||||
"CC-BY-SA": "CC BY-SA",
|
||||
"CC0": "CC0",
|
||||
"CHANGE-DATE": "CHANGE DATE",
|
||||
"Change-date": "Change date",
|
||||
"CHANGE-END-DATE": "CHANGE END DATE",
|
||||
"Change-end-date": "Change end date",
|
||||
"Casual": {
|
||||
"comment": "\"Casual\" Data quality grade",
|
||||
"val": "Casual"
|
||||
},
|
||||
"CC-BY": {
|
||||
"comment": "Short label for the Creative Commons Attribution license",
|
||||
"val": "CC BY"
|
||||
},
|
||||
"CC-BY-NC": {
|
||||
"comment": "Short label for the Creative Commons Attribution-NonCommercial license",
|
||||
"val": "CC BY-NC"
|
||||
},
|
||||
"CC-BY-NC-ND": {
|
||||
"comment": "Short label for the Creative Commons Attribution-NonCommercial-NoDerivatives license",
|
||||
"val": "CC BY-NC-ND"
|
||||
},
|
||||
"CC-BY-NC-SA": {
|
||||
"comment": "Short label for the Creative Commons Attribution-NonCommercial-ShareAlike license",
|
||||
"val": "CC BY-NC-SA"
|
||||
},
|
||||
"CC-BY-ND": {
|
||||
"comment": "Short label for the Creative Commons Attribution-NoDerivatives license",
|
||||
"val": "CC BY-ND"
|
||||
},
|
||||
"CC-BY-SA": {
|
||||
"comment": "Short label for the Creative Commons Attribution-ShareAlike license",
|
||||
"val": "CC BY-SA"
|
||||
},
|
||||
"CC0": {
|
||||
"comment": "Short label for the Creative Commons Zero declaration",
|
||||
"val": "CC0"
|
||||
},
|
||||
"CHANGE-DATE": {
|
||||
"comment": "Label for a button that changes a selected date",
|
||||
"val": "CHANGE DATE"
|
||||
},
|
||||
"Change-date": {
|
||||
"comment": "Label for a button that changes a selected date",
|
||||
"val": "Change date"
|
||||
},
|
||||
"CHANGE-END-DATE": {
|
||||
"comment": "Label for a button that changes a selected end date",
|
||||
"val": "CHANGE END DATE"
|
||||
},
|
||||
"Change-end-date": {
|
||||
"comment": "Label for a button that changes a selected end date",
|
||||
"val": "Change end date"
|
||||
},
|
||||
"Change-project": "Change project",
|
||||
"CHANGE-START-DATE": "CHANGE START DATE",
|
||||
"Change-start-date": "Change start date",
|
||||
"CHANGE-START-DATE": {
|
||||
"comment": "Label for a button that changes a selected start date",
|
||||
"val": "CHANGE START DATE"
|
||||
},
|
||||
"Change-start-date": {
|
||||
"comment": "Label for a button that changes a selected start date",
|
||||
"val": "Change start date"
|
||||
},
|
||||
"Change-taxon": "Change taxon",
|
||||
"Change-taxon-filter": {
|
||||
"comment": "Button that changes the taxon filter on Explore",
|
||||
"val": "Change taxon filter"
|
||||
},
|
||||
"Change-user": "Change user",
|
||||
"Change-zoom": {
|
||||
"comment": "Label for a button that cycles through zoom levels for the camera",
|
||||
@@ -133,50 +201,80 @@
|
||||
},
|
||||
"Check-this-box-if-you-want-to-apply-a-Creative-Commons": "Check this box if you want to apply a Creative Commons",
|
||||
"CHECK-YOUR-EMAIL": {
|
||||
"comment": "After pressing the reset password button",
|
||||
"comment": "Notification that appears after pressing the reset password button",
|
||||
"val": "CHECK YOUR EMAIL!"
|
||||
},
|
||||
"Checkmark": "Checkmark",
|
||||
"CHOOSE-PHOTOS": {
|
||||
"comment": "Text for a button prompting the user to grant access to the gallery",
|
||||
"val": "CHOOSE PHOTOS"
|
||||
},
|
||||
"Clear": "Clear",
|
||||
"Close": "Close",
|
||||
"Close-add-observation-modal": "Close add observation modal.",
|
||||
"Choose-taxon": {
|
||||
"comment": "Label for button that chooses a taxon",
|
||||
"val": "Choose taxon"
|
||||
},
|
||||
"Clear": {
|
||||
"comment": "Label for a button that clears content, like the text entered in a text\nfield",
|
||||
"val": "Clear"
|
||||
},
|
||||
"Close": {
|
||||
"comment": "Label for a button that closes a window or popup",
|
||||
"val": "Close"
|
||||
},
|
||||
"Close-permission-request-screen": {
|
||||
"comment": "Accessibility label for a button that closes the permission request screen",
|
||||
"val": "Close permission request screen"
|
||||
},
|
||||
"Close-search": "Close search",
|
||||
"Close-search": {
|
||||
"comment": "Label for a button that closes a search interface",
|
||||
"val": "Close search"
|
||||
},
|
||||
"Closes-new-observation-options": "Closes new observation options.",
|
||||
"Closes-withdraw-id-sheet": "Closes \"Withdraw ID\" sheet",
|
||||
"COLLABORATORS": "COLLABORATORS",
|
||||
"COLLABORATORS": {
|
||||
"comment": "Heading for a section that describes people and organizations that\ncollaborate with iNaturalist",
|
||||
"val": "COLLABORATORS"
|
||||
},
|
||||
"Collection-Project": "Collection Project",
|
||||
"Combine-Photos": "Combine Photos",
|
||||
"COMMENT": "COMMENT",
|
||||
"Combine-Photos": {
|
||||
"comment": "Button that combines multiple photos into a single observation",
|
||||
"val": "Combine Photos"
|
||||
},
|
||||
"COMMENT": {
|
||||
"comment": "Title for a form that let's you enter a comment",
|
||||
"val": "COMMENT"
|
||||
},
|
||||
"Comment-options": {
|
||||
"comment": "Accessibility label for a button that shows options for a comment",
|
||||
"comment": "Label for a button that shows options for a comment",
|
||||
"val": "Comment options"
|
||||
},
|
||||
"Common-Name-Scientific-Name": "Common Name (Scientific Name)",
|
||||
"Common-Name-Scientific-Name": {
|
||||
"comment": "Label for a setting that shows the common name first",
|
||||
"val": "Common Name (Scientific Name)"
|
||||
},
|
||||
"Community-Guidelines": "Community Guidelines",
|
||||
"Community-Moderation-Settings": "Community Moderation Settings",
|
||||
"CONFIRM": "CONFIRM",
|
||||
"CONFIRM": {
|
||||
"comment": "Button that confirms a choice the user has made",
|
||||
"val": "CONFIRM"
|
||||
},
|
||||
"Connect-with-other-naturalists": "Connect with other naturalists and engage in conversations.",
|
||||
"Connected-Accounts": "Connected Accounts",
|
||||
"Connection-problem-Please-try-again-later": "Connection problem. Please try again later.",
|
||||
"CONTACT-SUPPORT": "CONTACT SUPPORT",
|
||||
"CONTINUE": "CONTINUE",
|
||||
"Coordinates-copied-to-keyboard": "Coordinates copied to keyboard",
|
||||
"Copy-coordinates": "Copy Coordinates",
|
||||
"Copy-map-coordinates": "Copy map coordinates",
|
||||
"Coordinates-copied-to-clipboard": {
|
||||
"comment": "Notification when coordinates have been copied",
|
||||
"val": "Coordinates copied to clipboard"
|
||||
},
|
||||
"Copy-coordinates": {
|
||||
"comment": "Button that copies coordinates to the clipboard",
|
||||
"val": "Copy Coordinates"
|
||||
},
|
||||
"Copyright": {
|
||||
"comment": "Right to control copies of a creative work; this string may be used as a\nheading to describe general information about rights, attribution, and\nlicensing",
|
||||
"val": "Copyright"
|
||||
},
|
||||
"Couldnt-create-comment": "Couldn't create comment",
|
||||
"Couldnt-create-identification-error": "Couldn't create identification { $error }",
|
||||
"Couldnt-create-identification-unknown-error": "Couldn't create identification, Unknown Error.",
|
||||
"Couldnt-create-identification-unknown-error": "Couldn't create identification, unknown error.",
|
||||
"CREATE-AN-ACCOUNT": "CREATE AN ACCOUNT",
|
||||
"Create-an-observation-evidence": "Create an observation with no evidence",
|
||||
"CREATE-YOUR-FIRST-OBSERVATION": "CREATE YOUR FIRST OBSERVATION",
|
||||
@@ -184,15 +282,18 @@
|
||||
"DATA-QUALITY-ASSESSMENT": "DATA QUALITY ASSESSMENT",
|
||||
"Data-quality-assessment-can-taxon-still-be-confirmed-improved-based-on-the-evidence": "Based on the evidence, can the Community Taxon still be improved?",
|
||||
"Data-quality-assessment-community-taxon-species-level-or-lower": "Community taxon at species level or lower",
|
||||
"Data-quality-assessment-date-is-accurate": "Date is accurate",
|
||||
"Data-quality-assessment-date-is-accurate": {
|
||||
"comment": "Data Quality Assessment section label: whether or not the observation date is accurate",
|
||||
"val": "Date is accurate"
|
||||
},
|
||||
"Data-quality-assessment-date-specified": {
|
||||
"comment": "checklist test for Data Quality Assessment of Observation Details",
|
||||
"comment": "Data Quality Assessment section label: whether or not the observation date was specified",
|
||||
"val": "Date specified"
|
||||
},
|
||||
"Data-quality-assessment-description-casual": "This observation has not met the conditions for Research Grade status.",
|
||||
"Data-quality-assessment-description-needs-id": "This observation has not yet met the conditions for Research Grade status:",
|
||||
"Data-quality-assessment-description-research": {
|
||||
"comment": "description for different quality grades in the DQA",
|
||||
"comment": "Data Quality Assessment explanation when quality is Research Grade",
|
||||
"val": "It can now be used for research and featured on other websites."
|
||||
},
|
||||
"Data-quality-assessment-evidence-of-organism": "Evidence of organism",
|
||||
@@ -205,7 +306,7 @@
|
||||
"Data-quality-assessment-title-casual": "This observation is Casual Grade",
|
||||
"Data-quality-assessment-title-needs-id": "This observation Needs ID",
|
||||
"Data-quality-assessment-title-research": {
|
||||
"comment": "declares the current data quality status of the observation",
|
||||
"comment": "declares the current data quality status of the observation when quality is Research Grade",
|
||||
"val": "This observation is Research Grade!"
|
||||
},
|
||||
"Data-quality-casual-description": "This observation needs more information verified to be considered verifiable",
|
||||
@@ -234,10 +335,17 @@
|
||||
},
|
||||
"DATE-OBSERVED": "DATE OBSERVED",
|
||||
"Date-observed": "Date observed",
|
||||
"Date-observed-header-short": "Observed",
|
||||
"DATE-OBSERVED-NEWEST": "DATE OBSERVED - NEWEST TO OLDEST",
|
||||
"DATE-OBSERVED-OLDEST": "DATE OBSERVED - OLDEST TO NEWEST",
|
||||
"Date-Range": "Date Range",
|
||||
"DATE-RANGE": "DATE RANGE",
|
||||
"Date-Range": {
|
||||
"comment": "Label for controls over a range of dates",
|
||||
"val": "Date Range"
|
||||
},
|
||||
"DATE-RANGE": {
|
||||
"comment": "Label for controls over a range of dates",
|
||||
"val": "DATE RANGE"
|
||||
},
|
||||
"Date-short-format": {
|
||||
"comment": "Used when displaying a relative time - in this case, shows an absolute date (e.g. 12/31/22)",
|
||||
"val": "MM/dd/yy"
|
||||
@@ -255,19 +363,20 @@
|
||||
"comment": "Used when displaying a relative time - in this case, X weeks ago (e.g. 3w = 3 weeks ago)",
|
||||
"val": "{ $count }w"
|
||||
},
|
||||
"Date_observed_header_short": "Observed",
|
||||
"datetime-format-short": {
|
||||
"comment": "Date formatting using date-fns\nSee complete list of formatting styles: https://date-fns.org/v2.29.3/docs/format",
|
||||
"val": "M/d/yy h:mm a"
|
||||
},
|
||||
"December": "December",
|
||||
"Default-Search-Place": "Default Search Place",
|
||||
"December": {
|
||||
"comment": "Month of December",
|
||||
"val": "December"
|
||||
},
|
||||
"DELETE": "DELETE",
|
||||
"Delete-all-observations": "Delete all observations",
|
||||
"Delete-comment": "Delete comment",
|
||||
"DELETE-COMMENT-QUESTION": "DELETE COMMENT?",
|
||||
"DELETE-OBSERVATION": "DELETE OBSERVATION?",
|
||||
"DELETE-COMMENT--question": "DELETE COMMENT?",
|
||||
"Delete-observation": "Delete observation",
|
||||
"DELETE-OBSERVATION--question": "DELETE OBSERVATION?",
|
||||
"Delete-photo": {
|
||||
"comment": "Button label or accessibility label for an element that deletes a photo",
|
||||
"val": "Delete photo"
|
||||
@@ -285,27 +394,36 @@
|
||||
"comment": "Tab label or section title for content that describes further details, e.g.\nthe details of an observation",
|
||||
"val": "DETAILS"
|
||||
},
|
||||
"Disable-flash": "Disable flash",
|
||||
"DISCARD": "DISCARD",
|
||||
"DISCARD-ALL": "DISCARD ALL",
|
||||
"DISCARD-CHANGES": "DISCARD CHANGES",
|
||||
"Disable-flash": {
|
||||
"comment": "Button that disables the camera's flash",
|
||||
"val": "Disable flash"
|
||||
},
|
||||
"DISCARD": {
|
||||
"comment": "Button that discards changes or an item, e.g. a photo",
|
||||
"val": "DISCARD"
|
||||
},
|
||||
"DISCARD-ALL": {
|
||||
"comment": "Button that discards all items, e.g. imported photos",
|
||||
"val": "DISCARD ALL"
|
||||
},
|
||||
"DISCARD-CHANGES": {
|
||||
"comment": "Button that discards changes",
|
||||
"val": "DISCARD CHANGES"
|
||||
},
|
||||
"DISCARD-FILTER-CHANGES": "DISCARD FILTER CHANGES",
|
||||
"DISCARD-MEDIA": "DISCARD MEDIA?",
|
||||
"DISCARD-MEDIA--question": "DISCARD MEDIA?",
|
||||
"DISCARD-OBSERVATION": "DISCARD OBSERVATION",
|
||||
"DISCARD-PHOTOS": "DISCARD PHOTOS?",
|
||||
"DISCARD-PHOTOS--question": "DISCARD PHOTOS?",
|
||||
"DISCARD-RECORDING": {
|
||||
"comment": "Label for a button that discards a sound recording",
|
||||
"val": "DISCARD RECORDING"
|
||||
},
|
||||
"DISCARD-SOUND-header": {
|
||||
"DISCARD-SOUND--question": {
|
||||
"comment": "Header of a popup confirming that the user wants to discard a sound\nrecording",
|
||||
"val": "DISCARD SOUND?"
|
||||
},
|
||||
"DISCARD-X-OBSERVATIONS": "{ $count ->\n [one] DISCARD OBSERVATION\n *[other] DISCARD { $count } OBSERVATIONS\n}",
|
||||
"DISMISS": "DISMISS",
|
||||
"Display": "Display",
|
||||
"Display-Name": "Display Name",
|
||||
"Do-not-collect-stability-and-usage-data-using-third-party-services": "Do not collect stability and usage data using third-party services",
|
||||
"DONATE": "DONATE",
|
||||
"DONATE-TO-INATURALIST": "DONATE TO INATURALIST",
|
||||
"Donate-to-iNaturalist": "Donate to iNaturalist",
|
||||
@@ -315,7 +433,10 @@
|
||||
},
|
||||
"Dont-have-an-account": "Don't have an account? Sign up",
|
||||
"During-app-start-no-model-found": "During app start there was no computer vision model found. There will be no AR camera.",
|
||||
"Edit": "Edit",
|
||||
"Edit": {
|
||||
"comment": "Button for editing something",
|
||||
"val": "Edit"
|
||||
},
|
||||
"EDIT-COMMENT": "EDIT COMMENT",
|
||||
"Edit-comment": "Edit comment",
|
||||
"EDIT-LOCATION": "EDIT LOCATION",
|
||||
@@ -324,15 +445,20 @@
|
||||
"val": "Edit location"
|
||||
},
|
||||
"Edit-Observation": "Edit Observation",
|
||||
"EMAIL": "EMAIL",
|
||||
"Email": {
|
||||
"comment": "Appears above the email text field",
|
||||
"val": "email"
|
||||
"Edits-this-observations-taxon": {
|
||||
"comment": "Label for button that edits an observation's taxon",
|
||||
"val": "Edits this observation's taxon"
|
||||
},
|
||||
"EMAIL": "EMAIL",
|
||||
"EMAIL-DEBUG-LOGS": "EMAIL DEBUG LOGS",
|
||||
"Email-Notifications": "Email Notifications",
|
||||
"Enable-flash": "Enable flash",
|
||||
"Endemic": "Endemic",
|
||||
"Enable-flash": {
|
||||
"comment": "Button that enables the camera's flash",
|
||||
"val": "Enable flash"
|
||||
},
|
||||
"Endemic": {
|
||||
"comment": "Indicates a species only occurs in a specific place",
|
||||
"val": "Endemic"
|
||||
},
|
||||
"Endemic-to-place": {
|
||||
"comment": "TODO this and many other uses of placeables are not currently translatable\nwithout knowing the vowel/consonant state of the first letter of the\nplaceable",
|
||||
"val": "Endemic to { $place }"
|
||||
@@ -362,7 +488,6 @@
|
||||
"EXPLORE-OBSERVATIONS": "EXPLORE OBSERVATIONS",
|
||||
"EXPLORE-OBSERVERS": "EXPLORE OBSERVERS",
|
||||
"EXPLORE-SPECIES": "EXPLORE SPECIES",
|
||||
"External-Applications": "External Applications",
|
||||
"Failed-to-delete-sound": "Failed to delete sound",
|
||||
"Failed-to-log-in": {
|
||||
"comment": "Error message with log in fails",
|
||||
@@ -372,7 +497,10 @@
|
||||
"comment": "Header for featured projects",
|
||||
"val": "FEATURED"
|
||||
},
|
||||
"February": "February",
|
||||
"February": {
|
||||
"comment": "Month of February",
|
||||
"val": "February"
|
||||
},
|
||||
"Fetching-location": "Fetching location...",
|
||||
"Filter": "Filter",
|
||||
"FILTER-BY-A-PROJECT": "FILTER BY A PROJECT",
|
||||
@@ -393,8 +521,11 @@
|
||||
"val": "Flagged"
|
||||
},
|
||||
"Flash": "flash",
|
||||
"Flip-camera": {
|
||||
"comment": "Label for a button that toggles between the front and back cameras",
|
||||
"val": "Flip camera"
|
||||
},
|
||||
"FOLLOW": "FOLLOW",
|
||||
"Following": "Following",
|
||||
"Forgot-Password": {
|
||||
"comment": "Forgot password link",
|
||||
"val": "Forgot Password"
|
||||
@@ -455,8 +586,6 @@
|
||||
"val": "Improving"
|
||||
},
|
||||
"INATURALIST-ACCOUNT-SETTINGS": "INATURALIST ACCOUNT SETTINGS",
|
||||
"iNaturalist-Activity-Notifications": "iNaturalist Activity Notifications",
|
||||
"iNaturalist-Applications": "iNaturalist Applications",
|
||||
"iNaturalist-can-save-photos-you-take-in-the-app-to-your-devices-gallery": "iNaturalist can save photos you take in the app to your device’s gallery.",
|
||||
"INATURALIST-COMMUNITY": "INATURALIST COMMUNITY",
|
||||
"INATURALIST-FORUM": "INATURALIST FORUM",
|
||||
@@ -472,7 +601,6 @@
|
||||
"iNaturalist-mission-is-to-connect": "iNaturalist's mission is to connect people to nature and advance biodiversity science and conservation.",
|
||||
"INATURALIST-MISSION-VISION": "INATURALIST'S MISSION & VISION",
|
||||
"INATURALIST-NETWORK": "INATURALIST NETWORK",
|
||||
"iNaturalist-Network-Affiliation": "iNaturalist Network Affiliation",
|
||||
"INATURALIST-SETTINGS": "INATURALIST SETTINGS",
|
||||
"INATURALIST-STAFF": {
|
||||
"comment": "Label for the role a user plays on iNaturalist, e.g. \"INATURALIST STAFF\"\nor \"INATURALIST CURATOR\". Since the name \"INATURALIST\" should not be\ntranslated or locally it is inserted as a variable here, but it will always\nbe \"INATURALIST\"",
|
||||
@@ -494,7 +622,10 @@
|
||||
"Intl-number": "{ $val }",
|
||||
"Introduced": "Introduced",
|
||||
"Introduced-to-place": "Introduced to { $place }",
|
||||
"January": "January",
|
||||
"January": {
|
||||
"comment": "Month of January",
|
||||
"val": "January"
|
||||
},
|
||||
"JOIN": "JOIN",
|
||||
"JOIN-PROJECT": "JOIN PROJECT",
|
||||
"Join-the-largest-community-of-naturalists": "Join the largest community of naturalists in the world!",
|
||||
@@ -507,9 +638,14 @@
|
||||
"val": "Joined: { $date }"
|
||||
},
|
||||
"JOURNAL-POSTS-WITHOUT-NUMBER": "{ $count ->\n [one] JOURNAL POST\n *[other] JOURNAL POSTS\n}",
|
||||
"July": "July",
|
||||
"June": "June",
|
||||
"Language-Locale": "Language/Locale",
|
||||
"July": {
|
||||
"comment": "Month of July",
|
||||
"val": "July"
|
||||
},
|
||||
"June": {
|
||||
"comment": "Month of June",
|
||||
"val": "June"
|
||||
},
|
||||
"Last-Active-date": {
|
||||
"comment": "Shows date user last active on iNaturalist on user profile",
|
||||
"val": "Last Active: { $date }"
|
||||
@@ -531,7 +667,6 @@
|
||||
"LEAVE-PROJECT": "LEAVE PROJECT",
|
||||
"LEAVE-US-A-REVIEW": "LEAVE US A REVIEW!",
|
||||
"LICENSES": "LICENSES",
|
||||
"Licensing": "Licensing",
|
||||
"List-view": "List view",
|
||||
"Loading-iNaturalists-AR-Camera": "Loading iNaturalist's AR Camera",
|
||||
"LOCATION": "LOCATION",
|
||||
@@ -561,12 +696,18 @@
|
||||
"LOWEST-RANK": "LOWEST RANK",
|
||||
"MAP": "MAP",
|
||||
"Map-Area": "Map Area",
|
||||
"March": "March",
|
||||
"March": {
|
||||
"comment": "Month of March",
|
||||
"val": "March"
|
||||
},
|
||||
"maverick--identification": {
|
||||
"comment": "Identification category",
|
||||
"val": "Maverick"
|
||||
},
|
||||
"May": "May",
|
||||
"May": {
|
||||
"comment": "Month of May",
|
||||
"val": "May"
|
||||
},
|
||||
"MEDIA": "MEDIA",
|
||||
"MEMBERS-WITHOUT-NUMBER": "{ $count ->\n [one] MEMBER\n *[other] MEMBERS\n}",
|
||||
"Menu": {
|
||||
@@ -581,26 +722,26 @@
|
||||
"More-info": "More info",
|
||||
"MOST-FAVED": "MOST FAVED",
|
||||
"Most-faved": "Most faved",
|
||||
"Names": "Names",
|
||||
"Native": "Native",
|
||||
"Native-to-place": "Native to { $place }",
|
||||
"Navigates-to-add-identification": "Navigates to add identification.",
|
||||
"Navigates-to-AR-camera": "Navigates to AR camera.",
|
||||
"Navigates-to-bulk-importer": "Navigates to bulk importer.",
|
||||
"Navigates-to-camera": "Navigates to camera.",
|
||||
"Navigates-to-explore": "Navigates to explore.",
|
||||
"Navigates-to-AR-camera": "Navigates to AR camera",
|
||||
"Navigates-to-bulk-importer": "Navigates to bulk importer",
|
||||
"Navigates-to-camera": "Navigates to camera",
|
||||
"Navigates-to-explore": "Navigates to explore",
|
||||
"Navigates-to-notifications": "Navigates to notifications",
|
||||
"Navigates-to-observation-details": "Navigates to observation details screen.",
|
||||
"Navigates-to-observation-edit-screen": "Navigate to observation edit screen.",
|
||||
"Navigates-to-observations": "Navigates to observations.",
|
||||
"Navigates-to-photo-importer": "Navigate to photo importer.",
|
||||
"Navigates-to-previous-screen": "Navigate to previous screen",
|
||||
"Navigates-to-project-details": "Navigate to project details",
|
||||
"Navigates-to-sound-recorder": "Navigates to sound recorder.",
|
||||
"Navigates-to-suggest-identification": "Navigates to suggest identification.",
|
||||
"Navigates-to-suggestions": "Navigates to suggestions",
|
||||
"Navigates-to-observation-details": "Navigates to observation details screen",
|
||||
"Navigates-to-observation-edit-screen": "Navigate to observation edit screen",
|
||||
"Navigates-to-photo-importer": "Navigates to photo importer",
|
||||
"Navigates-to-previous-screen": "Navigates to previous screen",
|
||||
"Navigates-to-project-details": "Navigates to project details",
|
||||
"Navigates-to-sound-recorder": "Navigates to sound recorder",
|
||||
"Navigates-to-suggest-identification": "Navigates to suggest identification",
|
||||
"Navigates-to-taxon-details": "Navigates to taxon details",
|
||||
"Navigates-to-user-profile": "Navigates to user profile.",
|
||||
"Navigates-to-user-profile": "Navigates to user profile",
|
||||
"Navigates-to-your-observations": {
|
||||
"comment": "Label for button that takes you to your observations",
|
||||
"val": "Navigates to your observations"
|
||||
},
|
||||
"NEARBY": {
|
||||
"comment": "Header for nearby projects",
|
||||
"val": "NEARBY"
|
||||
@@ -608,12 +749,21 @@
|
||||
"Nearby": "Nearby",
|
||||
"NEARBY-SUGGESTIONS": "NEARBY SUGGESTIONS",
|
||||
"Needs-ID": "Needs ID",
|
||||
"New-Observation": "New Observation",
|
||||
"Newest-to-oldest": "Newest to oldest",
|
||||
"New-Observation": {
|
||||
"comment": "Heading when creating a new observation",
|
||||
"val": "New Observation"
|
||||
},
|
||||
"Newest-to-oldest": {
|
||||
"comment": "Sort order, refers to newest or oldest date",
|
||||
"val": "Newest to oldest"
|
||||
},
|
||||
"Next-observation": "Next observation",
|
||||
"No-Location": "No Location",
|
||||
"No-Media": "No Media",
|
||||
"No-model-found": "No model found",
|
||||
"No-model-found": {
|
||||
"comment": "As in a machine learning model that powers automated suggestions",
|
||||
"val": "No model found"
|
||||
},
|
||||
"No-Notifications-Found": "You have no notifications! Get started by creating your own observations.",
|
||||
"No-projects-match-that-search": "No projects match that search",
|
||||
"No-results-found": {
|
||||
@@ -640,7 +790,10 @@
|
||||
"comment": "notification when someone adds an identification to your observation",
|
||||
"val": "<0>{ $userName }</0> added an identification to an observation by you"
|
||||
},
|
||||
"November": "November",
|
||||
"November": {
|
||||
"comment": "Month of November",
|
||||
"val": "November"
|
||||
},
|
||||
"Obervations-must-be-manually-added": "Observations must be manually added to a traditional project, either during the upload stage or after the observation has been shared to iNaturalist. A user must also join a traditional project in order to add their observations to it.",
|
||||
"Obscured": "Obscured",
|
||||
"Obscured-observation-location-map-description": {
|
||||
@@ -661,12 +814,18 @@
|
||||
"Observations": "Observations",
|
||||
"Observations-created-on-iNaturalist": "Observations created on iNaturalist are used by scientists around the world.",
|
||||
"Observations-View": "Observations View",
|
||||
"OBSERVATIONS-WITHOUT-NUMBER": "{ $count ->\n [one] OBSERVATION\n *[other] OBSERVATIONS\n}",
|
||||
"OBSERVATIONS-WITHOUT-NUMBER": {
|
||||
"comment": "Might be used when the number is represented using an image or other\nelement, not text",
|
||||
"val": "{ $count ->\n [one] OBSERVATION\n *[other] OBSERVATIONS\n}"
|
||||
},
|
||||
"Observations-you-upload-to-iNaturalist": {
|
||||
"comment": "Onboarding text on MyObservations: Onboarding text on MyObservations: 11-50 observations",
|
||||
"val": "Observations you upload to iNaturalist can be used by scientists and researchers worldwide."
|
||||
},
|
||||
"Observe": "Observe",
|
||||
"Observe": {
|
||||
"comment": "Button that starts a new observation",
|
||||
"val": "Observe"
|
||||
},
|
||||
"Observe-and-identify-organisms-from-your-gallery": {
|
||||
"comment": "Title of screen asking for permission to access the gallery",
|
||||
"val": "Observe and identify organisms from your gallery"
|
||||
@@ -680,8 +839,14 @@
|
||||
"val": "OBSERVE ORGANISMS"
|
||||
},
|
||||
"Observers": "Observers",
|
||||
"Observers-View": "Observers View",
|
||||
"October": "October",
|
||||
"Observers-View": {
|
||||
"comment": "Section in Explore that shows people who added observations given a set of search filters",
|
||||
"val": "Observers View"
|
||||
},
|
||||
"October": {
|
||||
"comment": "Month of October",
|
||||
"val": "October"
|
||||
},
|
||||
"Offensive-Inappropriate": "Offensive/Inappropriate",
|
||||
"Offensive-Inappropriate-Examples": "Misleading or illegal content, racial or ethnic slurs, etc. For more on our defintion of \"appropriate,\" see the FAQ.",
|
||||
"Offline-DQA-description": "The DQA may not be accurate. Check your internet connection and try again.",
|
||||
@@ -690,9 +855,15 @@
|
||||
"comment": "Generic confirmation, e.g. button on a warning alert",
|
||||
"val": "OK"
|
||||
},
|
||||
"Oldest-to-newest": "Oldest to newest",
|
||||
"Oldest-to-newest": {
|
||||
"comment": "Sort order, refers to newest or oldest date",
|
||||
"val": "Oldest to newest"
|
||||
},
|
||||
"One-last-step": "One last step!",
|
||||
"Open": "Open",
|
||||
"Open": {
|
||||
"comment": "Adjective, as in geoprivacy",
|
||||
"val": "Open"
|
||||
},
|
||||
"Open-drawer": "Open drawer",
|
||||
"OPEN-EMAIL": "OPEN EMAIL",
|
||||
"Open-menu": "Open menu.",
|
||||
@@ -748,16 +919,21 @@
|
||||
"val": "Press record to start"
|
||||
},
|
||||
"Previous-observation": "Previous observation",
|
||||
"Prioritize-common-names-used-in-this-place": "Prioritize common names used in this place.",
|
||||
"Privacy": "Privacy",
|
||||
"Privacy-Policy": "Privacy Policy",
|
||||
"Private": "Private",
|
||||
"Profile-Picture": "Profile Picture",
|
||||
"PROJECT": "PROJECT",
|
||||
"PROJECT": {
|
||||
"comment": "As in an iNat project, a collection of observations or observation search filters",
|
||||
"val": "PROJECT"
|
||||
},
|
||||
"PROJECT-REQUIREMENTS": "PROJECT REQUIREMENTS",
|
||||
"Project-Settings": "Project Settings",
|
||||
"PROJECTS": "PROJECTS",
|
||||
"Projects": "Projects",
|
||||
"PROJECTS": {
|
||||
"comment": "As in iNat project, collections of observations or observation search filters",
|
||||
"val": "PROJECTS"
|
||||
},
|
||||
"Projects": {
|
||||
"comment": "As in iNat projects, collections of observations or observation search filters",
|
||||
"val": "Projects"
|
||||
},
|
||||
"QUALITY-GRADE": "QUALITY GRADE",
|
||||
"Quality-Grade-casual": {
|
||||
"comment": "Shortened display of an observation's quality grade (used when displayed in a badge) - in this case, Casual",
|
||||
@@ -814,7 +990,10 @@
|
||||
"Ranks-ZOOSECTION": "ZOOSECTION",
|
||||
"Ranks-ZOOSUBSECTION": "ZOOSUBSECTION",
|
||||
"Read-more-on-Wikipedia": "Read more on Wikipedia",
|
||||
"RECORD-NEW-SOUND": "RECORD NEW SOUND",
|
||||
"RECORD-NEW-SOUND": {
|
||||
"comment": "Heading for the sound recorder",
|
||||
"val": "RECORD NEW SOUND"
|
||||
},
|
||||
"Record-organism-sounds-with-the-microphone": {
|
||||
"comment": "Title of screen asking for permission to access the microphone",
|
||||
"val": "Record organism sounds with the microphone"
|
||||
@@ -828,12 +1007,30 @@
|
||||
"comment": "Imperative verb for recording a sound",
|
||||
"val": "Record"
|
||||
},
|
||||
"Recording-sound": "Recording sound",
|
||||
"Recording-sound": {
|
||||
"comment": "Status while recording a sound",
|
||||
"val": "Recording sound"
|
||||
},
|
||||
"Recording-stopped-Tap-play-the-current-recording": "Recording stopped. Tap play the current recording.",
|
||||
"REDO-SEARCH-IN-MAP-AREA": "REDO SEARCH IN MAP AREA",
|
||||
"Remove-agreement": {
|
||||
"comment": "Label for a button that removes a vote of agreement",
|
||||
"val": "Remove agreement"
|
||||
},
|
||||
"Remove-disagreement": {
|
||||
"comment": "Label for a button that removes a vote of disagreement",
|
||||
"val": "Remove disagreement"
|
||||
},
|
||||
"Remove-favorite": "Remove favorite",
|
||||
"Remove-Photos": "Remove Photos",
|
||||
"Remove-Relationship": "Remove Relationship",
|
||||
"Removes-your-vote-of-agreement": {
|
||||
"comment": "Hint for a button that removes a vote of agreement",
|
||||
"val": "Removes your vote of agreement"
|
||||
},
|
||||
"Removes-your-vote-of-disagreement": {
|
||||
"comment": "Hint for a button that removes a vote of disagreement",
|
||||
"val": "Removes your vote of disagreement"
|
||||
},
|
||||
"Research-Grade": {
|
||||
"comment": "Quality grade option",
|
||||
"val": "Research Grade"
|
||||
@@ -867,7 +1064,6 @@
|
||||
"val": "REVIEWED"
|
||||
},
|
||||
"Reviewed-observations-only": "Reviewed observations only",
|
||||
"Revoke": "Revoke",
|
||||
"Satellite--map-type": {
|
||||
"comment": "Label for the satellite map type",
|
||||
"val": "Satellite"
|
||||
@@ -889,8 +1085,14 @@
|
||||
"Scan-the-area-around-you-for-organisms": "Scan the area around you for organisms.",
|
||||
"Scientific-Name": "Scientific Name",
|
||||
"Scientific-Name-Common-Name": "Scientific Name (Common Name)",
|
||||
"SEARCH": "SEARCH",
|
||||
"Search": "Search",
|
||||
"SEARCH": {
|
||||
"comment": "Title for a search interface",
|
||||
"val": "SEARCH"
|
||||
},
|
||||
"Search": {
|
||||
"comment": "Title for a search interface",
|
||||
"val": "Search"
|
||||
},
|
||||
"SEARCH-FOR-A-LOCATION": "SEARCH FOR A LOCATION",
|
||||
"Search-for-a-project": "Search for a project",
|
||||
"SEARCH-FOR-A-TAXON": "SEARCH FOR A TAXON",
|
||||
@@ -930,7 +1132,10 @@
|
||||
},
|
||||
"Selects-iconic-taxon-X-for-identification": "Selects iconic taxon { $iconicTaxon } for identification.",
|
||||
"Separate-Photos": "Separate Photos",
|
||||
"September": "September",
|
||||
"September": {
|
||||
"comment": "Month of September",
|
||||
"val": "September"
|
||||
},
|
||||
"SETTINGS": "SETTINGS",
|
||||
"Settings": "Settings",
|
||||
"Share": "Share",
|
||||
@@ -940,6 +1145,10 @@
|
||||
"SHOP-INATURALIST-MERCH": "SHOP INATURALIST MERCH",
|
||||
"Shop-iNaturalist-Merch": "Shop iNaturalist Merch",
|
||||
"Show-observation-options": "Show observation options.",
|
||||
"Shows-identification-suggestions": {
|
||||
"comment": "Label for button that shows identification suggestions",
|
||||
"val": "Shows identification suggestions"
|
||||
},
|
||||
"Shows-iNaturalist-bird-logo": "Shows iNaturalist bird logo.",
|
||||
"Sign-out": "Sign out",
|
||||
"Some-data-privacy-laws": "Some data privacy laws, like the European Union's General Data Protection Regulation (GDPR), require explicit consent to transfer personal information from their jurisdictions to other jurisdictions where the legal protection of this information is not considered adequate. As of 2020, the European Union no longer considers the United States to be a jurisdiction that provides adequate legal protection of personal information, specifically because of the possibility of the US government surveilling data entering the US. It is possible other jurisdictions may have the same opinion.",
|
||||
@@ -1014,7 +1223,6 @@
|
||||
"comment": "Header for a block of text describing a taxon's taxonomy",
|
||||
"val": "TAXONOMY"
|
||||
},
|
||||
"Taxonomy-Settings": "Taxonomy Settings",
|
||||
"TEACHERS": "TEACHERS",
|
||||
"Teachers-Guide": "Teachers' Guide",
|
||||
"TEAM": "TEAM",
|
||||
@@ -1022,7 +1230,6 @@
|
||||
"Text-Box-to-Describe-Reason-for-Flag": "Text box to describe reason for flag.",
|
||||
"The-exact-location-will-be-hidden": "The exact location will be hidden publicly, and instead generalized to a larger area. (Threatened and endangered species are automatically obscured).",
|
||||
"The-iNaturalist-Network": "The iNaturalist network is a collection of localized websites that are fully connected to the global iNaturalist community. Network sites are supported by local institutions that promote local use and facilitate the use of data from iNaturalist to benefit local biodiversity.",
|
||||
"The-iNaturalist-Network-is-a-collection-of-localized-websites": "The iNaturalist Network is a collection of localized websites that are fully connected to the global iNaturalist community. Network sites are supported by local institutions that have signed an agreement with iNaturalist to promote local use and benefit local biodiversity. They have access to true coordinates from their countries that are automatically obscured from public view in order to protect threatened species. Your username and password works on all sites that are part of the iNaturalist Network. If you choose to affiliate with a Network site, the local institutions that operate each site will also have access to your email address (only to communicate with you about site activities) and access to the true coordinates for observations that are publicly obscured or private. Note: Please do not experimentally change your affiliation if you have more than 1000 observations.",
|
||||
"The-iNaturalist-team-has-collaborated": "The iNaturalist team has collaborated with...",
|
||||
"The-location-will-not-be-visible": "The location will not be visible to others, which means it may be difficult to identify.",
|
||||
"There-is-no-way": "There is no way to have an iNaturalist account without storing personal information, so the only way to revoke this consent is to delete your account.",
|
||||
@@ -1030,21 +1237,16 @@
|
||||
"comment": " Wild status sheet descriptions",
|
||||
"val": "This is a wild organism and wasn't placed in this location by humans."
|
||||
},
|
||||
"This-is-how-all-taxon-names-will-be-displayed-to-you-across-iNaturalist": "This is how all taxon names will be displayed to you across iNaturalist",
|
||||
"This-is-how-taxon-names-will-be-displayed": "This is how all taxon names will be displayed to you across iNaturalist:",
|
||||
"This-observer-has-opted-out-of-the-Community-Taxon": "This observer has opted out of the Community Taxon",
|
||||
"This-organism-was-placed-by-humans": "This organism was placed in this location by humans. This applies to things like garden plants, pets, and zoo animals.",
|
||||
"This-sets-your-language-and-date-formatting-preferences-across-iNaturalist": "This sets your language and date formatting preferences across iNaturalist based on your locale.",
|
||||
"This-will-be-your-default-place-for-all-searches-in-Explore-and-Identify": "This will be your default place for all searches in Explore and Identify.",
|
||||
"To-access-all-other-settings": "To access all other account settings, click here:",
|
||||
"To-learn-more-about-what-information": "To learn more about what information we collect and how we use it, please see our Privacy Policy and our Terms of Use.",
|
||||
"To-sync-your-observations-to-iNaturalist": "To sync your observations to iNaturalist, please log in.",
|
||||
"Toggle-map-type": "Toggle map type",
|
||||
"TOP-ID-SUGGESTION": "TOP ID SUGGESTION",
|
||||
"Traditional-Project": "Traditional Project",
|
||||
"Trust-with-hidden-coordinates": "Trust with hidden coordinates",
|
||||
"Umbrella-Project": "Umbrella Project",
|
||||
"Unblock": "Unblock",
|
||||
"UNFOLLOW": "UNFOLLOW",
|
||||
"UNFOLLOW-USER": "UNFOLLOW USER?",
|
||||
"Unknown--taxon": {
|
||||
@@ -1060,7 +1262,6 @@
|
||||
"val": "Unknown error"
|
||||
},
|
||||
"Unknown-organism": "Unknown organism",
|
||||
"Unmute": "Unmute",
|
||||
"Unreviewed-observations-only": "Unreviewed observations only",
|
||||
"Upload-Complete": "Upload Complete",
|
||||
"Upload-in-progress": "Upload in progress",
|
||||
@@ -1095,7 +1296,6 @@
|
||||
"USER": "USER",
|
||||
"User": "User { $userHandle }",
|
||||
"USERNAME": "USERNAME",
|
||||
"Username": "Username",
|
||||
"USERNAME-OR-EMAIL": {
|
||||
"comment": "Appears above the text fields",
|
||||
"val": "USERNAME OR EMAIL"
|
||||
@@ -1113,7 +1313,10 @@
|
||||
"View-photo-licensing-info": "View photo licensing info",
|
||||
"VIEW-PROJECT-REQUIREMENTS": "VIEW PROJECT REQUIREMENTS",
|
||||
"VIEW-PROJECTS": "VIEW PROJECTS",
|
||||
"View-suggestions": "View suggestions",
|
||||
"View-suggestions": {
|
||||
"comment": "Label for a button that shows identification suggestions for an observation\nor photo",
|
||||
"val": "View suggestions"
|
||||
},
|
||||
"VIEW-TEACHERS-GUIDE": "VIEW TEACHERS' GUIDE",
|
||||
"Viewing-Offline-Suggestions": {
|
||||
"comment": "Title for a notice informing the user that they are viewing offline\nidentification suggestions",
|
||||
@@ -1129,8 +1332,6 @@
|
||||
},
|
||||
"WHAT-IS-INATURALIST": "WHAT IS INATURALIST?",
|
||||
"Whats-more-by-recording": "What's more, by recording and sharing your observations, you'll create research-quality data for scientists working to better understand and protect nature. So if you like recording your findings from the outdoors, or if you just like learning about life, join us!",
|
||||
"Which-traditional-projects-can-add-your-observations": "Which traditional projects can add your observations?",
|
||||
"Who-can-add-observation-fields-to-my-observations": "Who can add observation fields to my observations?",
|
||||
"WIKIPEDIA": "WIKIPEDIA",
|
||||
"Wild": "Wild",
|
||||
"WILD-STATUS": "WILD STATUS",
|
||||
|
||||
1426
src/i18n/l10n/en.ftl.json.orig
Normal file
1426
src/i18n/l10n/en.ftl.json.orig
Normal file
File diff suppressed because it is too large
Load Diff
1136
src/i18n/l10n/en.ftl.orig
Normal file
1136
src/i18n/l10n/en.ftl.orig
Normal file
File diff suppressed because it is too large
Load Diff
4
src/i18n/l10n/fr.ftl
Normal file
4
src/i18n/l10n/fr.ftl
Normal file
@@ -0,0 +1,4 @@
|
||||
Native-to-place = Originaire { VOWORCON($place) ->
|
||||
[vow] d'{ $place }
|
||||
*[con] de { $place }
|
||||
}
|
||||
3
src/i18n/l10n/fr.ftl.json
Normal file
3
src/i18n/l10n/fr.ftl.json
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"Native-to-place": "Originaire { VOWORCON($place) ->\n [vow] d'{ $place }\n *[con] de { $place }\n}"
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
// AUTO-GENERATED. See i18ncli.js
|
||||
export default locale => {
|
||||
if ( locale === "ru" ) { return require( "./l10n/ru.ftl.json" ); }
|
||||
if ( locale === "fr" ) { return require( "./l10n/fr.ftl.json" ); }
|
||||
if ( locale === "es" ) { return require( "./l10n/es.ftl.json" ); }
|
||||
if ( locale === "es-MX" ) { return require( "./l10n/es-MX.ftl.json" ); }
|
||||
if ( locale === "en" ) { return require( "./l10n/en.ftl.json" ); }
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
### result of performing an action on the accessibility element." We write
|
||||
### them in third person singular ending with a period.
|
||||
|
||||
# Header above user biography / user description on user profile
|
||||
# Header for a general description, e.g. of a user, or of iNaturalist itself
|
||||
ABOUT = ABOUT
|
||||
ABOUT-COLLECTION-PROJECTS = ABOUT COLLECTION PROJECTS
|
||||
ABOUT-INATURALIST = ABOUT INATURALIST
|
||||
@@ -26,17 +26,19 @@ ABOUT-THE-DQA = ABOUT THE DQA
|
||||
About-the-DQA-description = The Quality Grade summarizes the accuracy, precision, completeness, relevance, and appropriateness of an iNaturalist observation as biodiversity data. Some attributes are automatically determined, while others are subject to a vote by iNat users. iNaturalist shares licensed "Research Grade" observations with a number of data partners for use in science and conservation.
|
||||
ABOUT-TRADITIONAL-PROJECTS = ABOUT TRADITIONAL PROJECTS
|
||||
ABOUT-UMBRELLA-PROJECTS = ABOUT UMBRELLA PROJECTS
|
||||
Accept-community-identifications = Accept community identifications
|
||||
# Label for a taxon when a user prefers to see or hear the common name first
|
||||
accessible-comname-sciname = { $commonName } ({ $scientificName })
|
||||
# Label for a taxon when a user prefers to see or hear the scientific name first
|
||||
accessible-sciname-comname = { $scientificName } ({ $commonName })
|
||||
Account = Account
|
||||
ACTIVITY = ACTIVITY
|
||||
# Label for a button that adds a vote of agreement
|
||||
Add-agreement = Add agreement
|
||||
ADD-AN-ID = ADD AN ID
|
||||
ADD-COMMENT = ADD COMMENT
|
||||
Add-comment = Add comment
|
||||
Add-Date-Time = Add Date/Time
|
||||
# Label for a button that adds a vote of disagreement
|
||||
Add-disagreement = Add disagreement
|
||||
ADD-EVIDENCE = ADD EVIDENCE
|
||||
Add-favorite = Add favorite
|
||||
Add-Location = Add Location
|
||||
@@ -45,12 +47,17 @@ Add-Location = Add Location
|
||||
Add-observations = Add observations
|
||||
ADD-OPTIONAL-COMMENT = ADD OPTIONAL COMMENT
|
||||
Add-optional-notes = Add optional notes
|
||||
Add-this-ID = Add this identification
|
||||
# Date relationship created, shown on settings relationships screen
|
||||
Added-on-date = Added on { $date }
|
||||
# Hint for a button that adds a vote of agreement
|
||||
Adds-your-vote-of-agreement = Adds your vote of agreement
|
||||
# Hint for a button that adds a vote of disagreement
|
||||
Adds-your-vote-of-disagreement = Adds your vote of disagreement
|
||||
Affiliation = Affiliation: { $site }
|
||||
# Label for button that adds an identification of the same taxon as another identification
|
||||
Agree = Agree
|
||||
# Label for button that adds an identification of the same taxon as another identification
|
||||
AGREE = AGREE
|
||||
# Checkbox label that checks all of the consent agreements a user must make
|
||||
# before signing up
|
||||
Agree-to-all-of-the-above = Agree to all of the above
|
||||
AGREE-WITH-ID = AGREE WITH ID?
|
||||
Agree-with-ID-description = Would you like to agree with the ID and suggest the following identification?
|
||||
@@ -58,26 +65,27 @@ ALL = ALL
|
||||
All = All
|
||||
All-observations = All observations
|
||||
All-organisms = All organisms
|
||||
# license code
|
||||
# As in intellectual property rights over a photo or other creative work
|
||||
all-rights-reserved = all rights reserved
|
||||
# As in automated identification suggestions
|
||||
ALL-SUGGESTIONS = ALL SUGGESTIONS
|
||||
Almost-done = Almost done!
|
||||
Already-have-an-account = Already have an account? Log in
|
||||
An-Internet-connection-is-required = An Internet connection is required to load more observations.
|
||||
# Generic option in a menu of choices that indicates that any of the choices
|
||||
# would be acceptable
|
||||
Any = Any
|
||||
# Geoprivacy sheet descriptions
|
||||
Anyone-using-iNaturalist-can-see = Anyone using iNaturalist can see where this species was observed, and scientists can most easily use it for research.
|
||||
app-authorized-on-date = { $appName } (authorized on: { $date })
|
||||
APPLY-FILTERS = APPLY FILTERS
|
||||
Apply-filters = Apply filters
|
||||
# Month of April
|
||||
April = April
|
||||
# Short for Augmented Reality Camera. This is what we call the camera that
|
||||
# overlays identification suggestions in real time
|
||||
AR-Camera = AR Camera
|
||||
Are-you-a-teacher = Are you a teacher wanting to use iNaturalist with your students?
|
||||
Are-you-sure-you-want-to-sign-out = Are you sure you want to sign out? This will delete all your observations on this device. It will not affect any observations you've uploaded to iNaturalist.
|
||||
Arrow-down-selected = Arrow down selected
|
||||
Arrow-down-unselected = Arrow down unselected
|
||||
Arrow-up-selected = Arrow up selected
|
||||
Arrow-up-unselected = Arrow up unselected
|
||||
# Onboarding text on MyObservations: 0-10 observations
|
||||
As-you-upload-more-observations = As you upload more observations, others in our community may be able to help you identify them!
|
||||
attribution-cc-by = some rights reserved (CC BY)
|
||||
@@ -86,12 +94,10 @@ attribution-cc-by-nc-nd = some rights reserved (CC BY-NC-ND)
|
||||
attribution-cc-by-nc-sa = some rights reserved (CC BY-NC-SA)
|
||||
attribution-cc-by-nd = some rights reserved (CC BY-ND)
|
||||
attribution-cc-by-sa = some rights reserved (CC BY-SA)
|
||||
# Month of August
|
||||
August = August
|
||||
Automatically-update-my-content-for-taxon-changes = Automatically update my content for taxon changes
|
||||
# Returns user to login screen
|
||||
BACK-TO-LOGIN = BACK TO LOGIN
|
||||
# Header for inserting user description in settings profile tab
|
||||
Bio = Bio
|
||||
BLOG = BLOG
|
||||
# Accessibility label for bulk import / photo import button
|
||||
# These are used by screen readers to label actionable elements iOS: https://developer.apple.com/documentation/uikit/uiaccessibilityelement/1619577-accessibilitylabel
|
||||
@@ -103,67 +109,92 @@ By-exiting-your-observations-not-saved = By exiting, your observations will not
|
||||
By-exiting-your-photos-will-not-be-saved = By exiting, your photos will not be saved.
|
||||
By-exiting-your-recorded-sound-will-not-be-saved = By exiting, your recorded sound will not be saved.
|
||||
Camera = Camera
|
||||
Camera-flip = Camera-flip
|
||||
CANCEL = CANCEL
|
||||
Cancel = Cancel
|
||||
Captive-Cultivated = Captive/Cultivated
|
||||
# "Casual" Data quality grade
|
||||
Casual = Casual
|
||||
# Short label for the Creative Commons Attribution license
|
||||
CC-BY = CC BY
|
||||
# Short label for the Creative Commons Attribution-NonCommercial license
|
||||
CC-BY-NC = CC BY-NC
|
||||
# Short label for the Creative Commons Attribution-NonCommercial-NoDerivatives license
|
||||
CC-BY-NC-ND = CC BY-NC-ND
|
||||
# Short label for the Creative Commons Attribution-NonCommercial-ShareAlike license
|
||||
CC-BY-NC-SA = CC BY-NC-SA
|
||||
# Short label for the Creative Commons Attribution-NoDerivatives license
|
||||
CC-BY-ND = CC BY-ND
|
||||
# Short label for the Creative Commons Attribution-ShareAlike license
|
||||
CC-BY-SA = CC BY-SA
|
||||
# Short label for the Creative Commons Zero declaration
|
||||
CC0 = CC0
|
||||
# Label for a button that changes a selected date
|
||||
CHANGE-DATE = CHANGE DATE
|
||||
# Label for a button that changes a selected date
|
||||
Change-date = Change date
|
||||
# Label for a button that changes a selected end date
|
||||
CHANGE-END-DATE = CHANGE END DATE
|
||||
# Label for a button that changes a selected end date
|
||||
Change-end-date = Change end date
|
||||
Change-project = Change project
|
||||
# Label for a button that changes a selected start date
|
||||
CHANGE-START-DATE = CHANGE START DATE
|
||||
# Label for a button that changes a selected start date
|
||||
Change-start-date = Change start date
|
||||
Change-taxon = Change taxon
|
||||
# Button that changes the taxon filter on Explore
|
||||
Change-taxon-filter = Change taxon filter
|
||||
Change-user = Change user
|
||||
# Label for a button that cycles through zoom levels for the camera
|
||||
Change-zoom = Change zoom
|
||||
Check-this-box-if-you-want-to-apply-a-Creative-Commons = Check this box if you want to apply a Creative Commons
|
||||
# After pressing the reset password button
|
||||
# Notification that appears after pressing the reset password button
|
||||
CHECK-YOUR-EMAIL = CHECK YOUR EMAIL!
|
||||
Checkmark = Checkmark
|
||||
# Text for a button prompting the user to grant access to the gallery
|
||||
CHOOSE-PHOTOS = CHOOSE PHOTOS
|
||||
# Label for button that chooses a taxon
|
||||
Choose-taxon = Choose taxon
|
||||
# Label for a button that clears content, like the text entered in a text
|
||||
# field
|
||||
Clear = Clear
|
||||
# Label for a button that closes a window or popup
|
||||
Close = Close
|
||||
Close-add-observation-modal = Close add observation modal.
|
||||
# Accessibility label for a button that closes the permission request screen
|
||||
Close-permission-request-screen = Close permission request screen
|
||||
# Label for a button that closes a search interface
|
||||
Close-search = Close search
|
||||
Closes-new-observation-options = Closes new observation options.
|
||||
Closes-withdraw-id-sheet = Closes "Withdraw ID" sheet
|
||||
# Heading for a section that describes people and organizations that
|
||||
# collaborate with iNaturalist
|
||||
COLLABORATORS = COLLABORATORS
|
||||
Collection-Project = Collection Project
|
||||
# Button that combines multiple photos into a single observation
|
||||
Combine-Photos = Combine Photos
|
||||
# Title for a form that let's you enter a comment
|
||||
COMMENT = COMMENT
|
||||
# Accessibility label for a button that shows options for a comment
|
||||
# Label for a button that shows options for a comment
|
||||
Comment-options = Comment options
|
||||
# Label for a setting that shows the common name first
|
||||
Common-Name-Scientific-Name = Common Name (Scientific Name)
|
||||
Community-Guidelines = Community Guidelines
|
||||
Community-Moderation-Settings = Community Moderation Settings
|
||||
# Button that confirms a choice the user has made
|
||||
CONFIRM = CONFIRM
|
||||
Connect-with-other-naturalists = Connect with other naturalists and engage in conversations.
|
||||
Connected-Accounts = Connected Accounts
|
||||
Connection-problem-Please-try-again-later = Connection problem. Please try again later.
|
||||
CONTACT-SUPPORT = CONTACT SUPPORT
|
||||
CONTINUE = CONTINUE
|
||||
Coordinates-copied-to-keyboard = Coordinates copied to keyboard
|
||||
# Notification when coordinates have been copied
|
||||
Coordinates-copied-to-clipboard = Coordinates copied to clipboard
|
||||
# Button that copies coordinates to the clipboard
|
||||
Copy-coordinates = Copy Coordinates
|
||||
Copy-map-coordinates = Copy map coordinates
|
||||
# Right to control copies of a creative work; this string may be used as a
|
||||
# heading to describe general information about rights, attribution, and
|
||||
# licensing
|
||||
Copyright = Copyright
|
||||
Couldnt-create-comment = Couldn't create comment
|
||||
Couldnt-create-identification-error = Couldn't create identification { $error }
|
||||
Couldnt-create-identification-unknown-error = Couldn't create identification, Unknown Error.
|
||||
Couldnt-create-identification-unknown-error = Couldn't create identification, unknown error.
|
||||
CREATE-AN-ACCOUNT = CREATE AN ACCOUNT
|
||||
Create-an-observation-evidence = Create an observation with no evidence
|
||||
CREATE-YOUR-FIRST-OBSERVATION = CREATE YOUR FIRST OBSERVATION
|
||||
@@ -171,12 +202,13 @@ DATA-QUALITY = DATA QUALITY
|
||||
DATA-QUALITY-ASSESSMENT = DATA QUALITY ASSESSMENT
|
||||
Data-quality-assessment-can-taxon-still-be-confirmed-improved-based-on-the-evidence = Based on the evidence, can the Community Taxon still be improved?
|
||||
Data-quality-assessment-community-taxon-species-level-or-lower = Community taxon at species level or lower
|
||||
# Data Quality Assessment section label: whether or not the observation date is accurate
|
||||
Data-quality-assessment-date-is-accurate = Date is accurate
|
||||
# checklist test for Data Quality Assessment of Observation Details
|
||||
# Data Quality Assessment section label: whether or not the observation date was specified
|
||||
Data-quality-assessment-date-specified = Date specified
|
||||
Data-quality-assessment-description-casual = This observation has not met the conditions for Research Grade status.
|
||||
Data-quality-assessment-description-needs-id = This observation has not yet met the conditions for Research Grade status:
|
||||
# description for different quality grades in the DQA
|
||||
# Data Quality Assessment explanation when quality is Research Grade
|
||||
Data-quality-assessment-description-research = It can now be used for research and featured on other websites.
|
||||
Data-quality-assessment-evidence-of-organism = Evidence of organism
|
||||
Data-quality-assessment-has-photos-or-sounds = Has Photos or Sounds
|
||||
@@ -187,7 +219,7 @@ Data-quality-assessment-organism-is-wild = Organism is wild
|
||||
Data-quality-assessment-recent-evidence-of-organism = Recent evidence of an organism
|
||||
Data-quality-assessment-title-casual = This observation is Casual Grade
|
||||
Data-quality-assessment-title-needs-id = This observation Needs ID
|
||||
# declares the current data quality status of the observation
|
||||
# declares the current data quality status of the observation when quality is Research Grade
|
||||
Data-quality-assessment-title-research = This observation is Research Grade!
|
||||
Data-quality-casual-description = This observation needs more information verified to be considered verifiable
|
||||
Data-quality-needs-id-description = This observation needs more identifications to reach research grade
|
||||
@@ -207,9 +239,12 @@ Date-hours = { $count }h
|
||||
Date-minutes = { $count }m
|
||||
DATE-OBSERVED = DATE OBSERVED
|
||||
Date-observed = Date observed
|
||||
Date-observed-header-short = Observed
|
||||
DATE-OBSERVED-NEWEST = DATE OBSERVED - NEWEST TO OLDEST
|
||||
DATE-OBSERVED-OLDEST = DATE OBSERVED - OLDEST TO NEWEST
|
||||
# Label for controls over a range of dates
|
||||
Date-Range = Date Range
|
||||
# Label for controls over a range of dates
|
||||
DATE-RANGE = DATE RANGE
|
||||
# Used when displaying a relative time - in this case, shows an absolute date (e.g. 12/31/22)
|
||||
Date-short-format = MM/dd/yy
|
||||
@@ -222,18 +257,17 @@ DATE-UPLOADED-NEWEST = DATE UPLOADED - NEWEST TO OLDEST
|
||||
DATE-UPLOADED-OLDEST = DATE UPLOADED - OLDEST TO NEWEST
|
||||
# Used when displaying a relative time - in this case, X weeks ago (e.g. 3w = 3 weeks ago)
|
||||
Date-weeks = { $count }w
|
||||
Date_observed_header_short = Observed
|
||||
# Date formatting using date-fns
|
||||
# See complete list of formatting styles: https://date-fns.org/v2.29.3/docs/format
|
||||
datetime-format-short = M/d/yy h:mm a
|
||||
# Month of December
|
||||
December = December
|
||||
Default-Search-Place = Default Search Place
|
||||
DELETE = DELETE
|
||||
Delete-all-observations = Delete all observations
|
||||
Delete-comment = Delete comment
|
||||
DELETE-COMMENT-QUESTION = DELETE COMMENT?
|
||||
DELETE-OBSERVATION = DELETE OBSERVATION?
|
||||
DELETE-COMMENT--question = DELETE COMMENT?
|
||||
Delete-observation = Delete observation
|
||||
DELETE-OBSERVATION--question = DELETE OBSERVATION?
|
||||
# Button label or accessibility label for an element that deletes a photo
|
||||
Delete-photo = Delete photo
|
||||
Delete-sound = Delete sound
|
||||
@@ -248,28 +282,29 @@ Deleting-x-of-y-observations =
|
||||
# Tab label or section title for content that describes further details, e.g.
|
||||
# the details of an observation
|
||||
DETAILS = DETAILS
|
||||
# Button that disables the camera's flash
|
||||
Disable-flash = Disable flash
|
||||
# Button that discards changes or an item, e.g. a photo
|
||||
DISCARD = DISCARD
|
||||
# Button that discards all items, e.g. imported photos
|
||||
DISCARD-ALL = DISCARD ALL
|
||||
# Button that discards changes
|
||||
DISCARD-CHANGES = DISCARD CHANGES
|
||||
DISCARD-FILTER-CHANGES = DISCARD FILTER CHANGES
|
||||
DISCARD-MEDIA = DISCARD MEDIA?
|
||||
DISCARD-MEDIA--question = DISCARD MEDIA?
|
||||
DISCARD-OBSERVATION = DISCARD OBSERVATION
|
||||
DISCARD-PHOTOS = DISCARD PHOTOS?
|
||||
DISCARD-PHOTOS--question = DISCARD PHOTOS?
|
||||
# Label for a button that discards a sound recording
|
||||
DISCARD-RECORDING = DISCARD RECORDING
|
||||
# Header of a popup confirming that the user wants to discard a sound
|
||||
# recording
|
||||
DISCARD-SOUND-header = DISCARD SOUND?
|
||||
DISCARD-SOUND--question = DISCARD SOUND?
|
||||
DISCARD-X-OBSERVATIONS =
|
||||
{ $count ->
|
||||
[one] DISCARD OBSERVATION
|
||||
*[other] DISCARD { $count } OBSERVATIONS
|
||||
}
|
||||
DISMISS = DISMISS
|
||||
Display = Display
|
||||
Display-Name = Display Name
|
||||
Do-not-collect-stability-and-usage-data-using-third-party-services = Do not collect stability and usage data using third-party services
|
||||
DONATE = DONATE
|
||||
DONATE-TO-INATURALIST = DONATE TO INATURALIST
|
||||
Donate-to-iNaturalist = Donate to iNaturalist
|
||||
@@ -277,6 +312,7 @@ Donate-to-iNaturalist = Donate to iNaturalist
|
||||
DONE = DONE
|
||||
Dont-have-an-account = Don't have an account? Sign up
|
||||
During-app-start-no-model-found = During app start there was no computer vision model found. There will be no AR camera.
|
||||
# Button for editing something
|
||||
Edit = Edit
|
||||
EDIT-COMMENT = EDIT COMMENT
|
||||
Edit-comment = Edit comment
|
||||
@@ -284,12 +320,13 @@ EDIT-LOCATION = EDIT LOCATION
|
||||
# Label for interactive element that takes you to a location choosing screen
|
||||
Edit-location = Edit location
|
||||
Edit-Observation = Edit Observation
|
||||
# Label for button that edits an observation's taxon
|
||||
Edits-this-observations-taxon = Edits this observation's taxon
|
||||
EMAIL = EMAIL
|
||||
# Appears above the email text field
|
||||
Email = email
|
||||
EMAIL-DEBUG-LOGS = EMAIL DEBUG LOGS
|
||||
Email-Notifications = Email Notifications
|
||||
# Button that enables the camera's flash
|
||||
Enable-flash = Enable flash
|
||||
# Indicates a species only occurs in a specific place
|
||||
Endemic = Endemic
|
||||
# TODO this and many other uses of placeables are not currently translatable
|
||||
# without knowing the vowel/consonant state of the first letter of the
|
||||
@@ -316,12 +353,12 @@ EXPLORE-IDENTIFIERS = EXPLORE IDENTIFIERS
|
||||
EXPLORE-OBSERVATIONS = EXPLORE OBSERVATIONS
|
||||
EXPLORE-OBSERVERS = EXPLORE OBSERVERS
|
||||
EXPLORE-SPECIES = EXPLORE SPECIES
|
||||
External-Applications = External Applications
|
||||
Failed-to-delete-sound = Failed to delete sound
|
||||
# Error message with log in fails
|
||||
Failed-to-log-in = Failed to log in
|
||||
# Header for featured projects
|
||||
FEATURED = FEATURED
|
||||
# Month of February
|
||||
February = February
|
||||
Fetching-location = Fetching location...
|
||||
Filter = Filter
|
||||
@@ -341,8 +378,9 @@ Flag-Item-Other-Input-Hint = Specify the reason you're flagging this item
|
||||
# Status when an item has been flagged
|
||||
Flagged = Flagged
|
||||
Flash = flash
|
||||
# Label for a button that toggles between the front and back cameras
|
||||
Flip-camera = Flip camera
|
||||
FOLLOW = FOLLOW
|
||||
Following = Following
|
||||
# Forgot password link
|
||||
Forgot-Password = Forgot Password
|
||||
GEOPRIVACY = GEOPRIVACY
|
||||
@@ -391,8 +429,6 @@ IMPORT-X-OBSERVATIONS =
|
||||
# Identification category
|
||||
improving--identification = Improving
|
||||
INATURALIST-ACCOUNT-SETTINGS = INATURALIST ACCOUNT SETTINGS
|
||||
iNaturalist-Activity-Notifications = iNaturalist Activity Notifications
|
||||
iNaturalist-Applications = iNaturalist Applications
|
||||
iNaturalist-can-save-photos-you-take-in-the-app-to-your-devices-gallery = iNaturalist can save photos you take in the app to your device’s gallery.
|
||||
INATURALIST-COMMUNITY = INATURALIST COMMUNITY
|
||||
INATURALIST-FORUM = INATURALIST FORUM
|
||||
@@ -408,7 +444,6 @@ iNaturalist-is-supported-by-community = iNaturalist is supported by our amazing
|
||||
iNaturalist-mission-is-to-connect = iNaturalist's mission is to connect people to nature and advance biodiversity science and conservation.
|
||||
INATURALIST-MISSION-VISION = INATURALIST'S MISSION & VISION
|
||||
INATURALIST-NETWORK = INATURALIST NETWORK
|
||||
iNaturalist-Network-Affiliation = iNaturalist Network Affiliation
|
||||
INATURALIST-SETTINGS = INATURALIST SETTINGS
|
||||
# Label for the role a user plays on iNaturalist, e.g. "INATURALIST STAFF"
|
||||
# or "INATURALIST CURATOR". Since the name "INATURALIST" should not be
|
||||
@@ -429,6 +464,7 @@ Internet-Connection-Required = Internet Connection Required
|
||||
Intl-number = { $val }
|
||||
Introduced = Introduced
|
||||
Introduced-to-place = Introduced to { $place }
|
||||
# Month of January
|
||||
January = January
|
||||
JOIN = JOIN
|
||||
JOIN-PROJECT = JOIN PROJECT
|
||||
@@ -442,9 +478,10 @@ JOURNAL-POSTS-WITHOUT-NUMBER =
|
||||
[one] JOURNAL POST
|
||||
*[other] JOURNAL POSTS
|
||||
}
|
||||
# Month of July
|
||||
July = July
|
||||
# Month of June
|
||||
June = June
|
||||
Language-Locale = Language/Locale
|
||||
# Shows date user last active on iNaturalist on user profile
|
||||
Last-Active-date = Last Active: { $date }
|
||||
# Latitude, longitude on a single line on a single line
|
||||
@@ -458,7 +495,6 @@ LEAVE = LEAVE
|
||||
LEAVE-PROJECT = LEAVE PROJECT
|
||||
LEAVE-US-A-REVIEW = LEAVE US A REVIEW!
|
||||
LICENSES = LICENSES
|
||||
Licensing = Licensing
|
||||
List-view = List view
|
||||
Loading-iNaturalists-AR-Camera = Loading iNaturalist's AR Camera
|
||||
LOCATION = LOCATION
|
||||
@@ -482,9 +518,11 @@ Lowest = Lowest
|
||||
LOWEST-RANK = LOWEST RANK
|
||||
MAP = MAP
|
||||
Map-Area = Map Area
|
||||
# Month of March
|
||||
March = March
|
||||
# Identification category
|
||||
maverick--identification = Maverick
|
||||
# Month of May
|
||||
May = May
|
||||
MEDIA = MEDIA
|
||||
MEMBERS-WITHOUT-NUMBER =
|
||||
@@ -502,36 +540,37 @@ MONTHS = MONTHS
|
||||
More-info = More info
|
||||
MOST-FAVED = MOST FAVED
|
||||
Most-faved = Most faved
|
||||
Names = Names
|
||||
Native = Native
|
||||
Native-to-place = Native to { $place }
|
||||
Navigates-to-add-identification = Navigates to add identification.
|
||||
Navigates-to-AR-camera = Navigates to AR camera.
|
||||
Navigates-to-bulk-importer = Navigates to bulk importer.
|
||||
Navigates-to-camera = Navigates to camera.
|
||||
Navigates-to-explore = Navigates to explore.
|
||||
Navigates-to-AR-camera = Navigates to AR camera
|
||||
Navigates-to-bulk-importer = Navigates to bulk importer
|
||||
Navigates-to-camera = Navigates to camera
|
||||
Navigates-to-explore = Navigates to explore
|
||||
Navigates-to-notifications = Navigates to notifications
|
||||
Navigates-to-observation-details = Navigates to observation details screen.
|
||||
Navigates-to-observation-edit-screen = Navigate to observation edit screen.
|
||||
Navigates-to-observations = Navigates to observations.
|
||||
Navigates-to-photo-importer = Navigate to photo importer.
|
||||
Navigates-to-previous-screen = Navigate to previous screen
|
||||
Navigates-to-project-details = Navigate to project details
|
||||
Navigates-to-sound-recorder = Navigates to sound recorder.
|
||||
Navigates-to-suggest-identification = Navigates to suggest identification.
|
||||
Navigates-to-suggestions = Navigates to suggestions
|
||||
Navigates-to-observation-details = Navigates to observation details screen
|
||||
Navigates-to-observation-edit-screen = Navigate to observation edit screen
|
||||
Navigates-to-photo-importer = Navigates to photo importer
|
||||
Navigates-to-previous-screen = Navigates to previous screen
|
||||
Navigates-to-project-details = Navigates to project details
|
||||
Navigates-to-sound-recorder = Navigates to sound recorder
|
||||
Navigates-to-suggest-identification = Navigates to suggest identification
|
||||
Navigates-to-taxon-details = Navigates to taxon details
|
||||
Navigates-to-user-profile = Navigates to user profile.
|
||||
Navigates-to-user-profile = Navigates to user profile
|
||||
# Label for button that takes you to your observations
|
||||
Navigates-to-your-observations = Navigates to your observations
|
||||
# Header for nearby projects
|
||||
NEARBY = NEARBY
|
||||
Nearby = Nearby
|
||||
NEARBY-SUGGESTIONS = NEARBY SUGGESTIONS
|
||||
Needs-ID = Needs ID
|
||||
# Heading when creating a new observation
|
||||
New-Observation = New Observation
|
||||
# Sort order, refers to newest or oldest date
|
||||
Newest-to-oldest = Newest to oldest
|
||||
Next-observation = Next observation
|
||||
No-Location = No Location
|
||||
No-Media = No Media
|
||||
# As in a machine learning model that powers automated suggestions
|
||||
No-model-found = No model found
|
||||
No-Notifications-Found = You have no notifications! Get started by creating your own observations.
|
||||
No-projects-match-that-search = No projects match that search
|
||||
@@ -549,6 +588,7 @@ Notifications = Notifications
|
||||
notifications-user-added-comment-to-observation-by-you = <0>{ $userName }</0> added a comment to an observation by you
|
||||
# notification when someone adds an identification to your observation
|
||||
notifications-user-added-identification-to-observation-by-you = <0>{ $userName }</0> added an identification to an observation by you
|
||||
# Month of November
|
||||
November = November
|
||||
Obervations-must-be-manually-added = Observations must be manually added to a traditional project, either during the upload stage or after the observation has been shared to iNaturalist. A user must also join a traditional project in order to add their observations to it.
|
||||
Obscured = Obscured
|
||||
@@ -566,6 +606,8 @@ Observation-with-no-evidence = Observation with no evidence
|
||||
Observations = Observations
|
||||
Observations-created-on-iNaturalist = Observations created on iNaturalist are used by scientists around the world.
|
||||
Observations-View = Observations View
|
||||
# Might be used when the number is represented using an image or other
|
||||
# element, not text
|
||||
OBSERVATIONS-WITHOUT-NUMBER =
|
||||
{ $count ->
|
||||
[one] OBSERVATION
|
||||
@@ -573,6 +615,7 @@ OBSERVATIONS-WITHOUT-NUMBER =
|
||||
}
|
||||
# Onboarding text on MyObservations: Onboarding text on MyObservations: 11-50 observations
|
||||
Observations-you-upload-to-iNaturalist = Observations you upload to iNaturalist can be used by scientists and researchers worldwide.
|
||||
# Button that starts a new observation
|
||||
Observe = Observe
|
||||
# Title of screen asking for permission to access the gallery
|
||||
Observe-and-identify-organisms-from-your-gallery = Observe and identify organisms from your gallery
|
||||
@@ -581,7 +624,9 @@ Observe-and-identify-organisms-in-real-time-with-your-camera = Observe and ident
|
||||
# Text for a button prompting the user to grant access to the camera
|
||||
OBSERVE-ORGANISMS = OBSERVE ORGANISMS
|
||||
Observers = Observers
|
||||
# Section in Explore that shows people who added observations given a set of search filters
|
||||
Observers-View = Observers View
|
||||
# Month of October
|
||||
October = October
|
||||
Offensive-Inappropriate = Offensive/Inappropriate
|
||||
Offensive-Inappropriate-Examples = Misleading or illegal content, racial or ethnic slurs, etc. For more on our defintion of "appropriate," see the FAQ.
|
||||
@@ -589,8 +634,10 @@ Offline-DQA-description = The DQA may not be accurate. Check your internet conne
|
||||
Offline-No-Notifications = Cannot fetch notifications at this time.
|
||||
# Generic confirmation, e.g. button on a warning alert
|
||||
OK = OK
|
||||
# Sort order, refers to newest or oldest date
|
||||
Oldest-to-newest = Oldest to newest
|
||||
One-last-step = One last step!
|
||||
# Adjective, as in geoprivacy
|
||||
Open = Open
|
||||
Open-drawer = Open drawer
|
||||
OPEN-EMAIL = OPEN EMAIL
|
||||
@@ -631,15 +678,14 @@ Please-try-again-when-you-are-connected-to-the-internet = Please try again when
|
||||
# Help text for beginning a sound recording
|
||||
Press-record-to-start = Press record to start
|
||||
Previous-observation = Previous observation
|
||||
Prioritize-common-names-used-in-this-place = Prioritize common names used in this place.
|
||||
Privacy = Privacy
|
||||
Privacy-Policy = Privacy Policy
|
||||
Private = Private
|
||||
Profile-Picture = Profile Picture
|
||||
# As in an iNat project, a collection of observations or observation search filters
|
||||
PROJECT = PROJECT
|
||||
PROJECT-REQUIREMENTS = PROJECT REQUIREMENTS
|
||||
Project-Settings = Project Settings
|
||||
# As in iNat project, collections of observations or observation search filters
|
||||
PROJECTS = PROJECTS
|
||||
# As in iNat projects, collections of observations or observation search filters
|
||||
Projects = Projects
|
||||
QUALITY-GRADE = QUALITY GRADE
|
||||
# Shortened display of an observation's quality grade (used when displayed in a badge) - in this case, Casual
|
||||
@@ -689,6 +735,7 @@ Ranks-VARIETY = VARIETY
|
||||
Ranks-ZOOSECTION = ZOOSECTION
|
||||
Ranks-ZOOSUBSECTION = ZOOSUBSECTION
|
||||
Read-more-on-Wikipedia = Read more on Wikipedia
|
||||
# Heading for the sound recorder
|
||||
RECORD-NEW-SOUND = RECORD NEW SOUND
|
||||
# Title of screen asking for permission to access the microphone
|
||||
Record-organism-sounds-with-the-microphone = Record organism sounds with the microphone
|
||||
@@ -697,12 +744,20 @@ RECORD-SOUND = RECORD SOUND
|
||||
Record-sounds = Record sounds with your microphone
|
||||
# Imperative verb for recording a sound
|
||||
Record-verb = Record
|
||||
# Status while recording a sound
|
||||
Recording-sound = Recording sound
|
||||
Recording-stopped-Tap-play-the-current-recording = Recording stopped. Tap play the current recording.
|
||||
REDO-SEARCH-IN-MAP-AREA = REDO SEARCH IN MAP AREA
|
||||
# Label for a button that removes a vote of agreement
|
||||
Remove-agreement = Remove agreement
|
||||
# Label for a button that removes a vote of disagreement
|
||||
Remove-disagreement = Remove disagreement
|
||||
Remove-favorite = Remove favorite
|
||||
Remove-Photos = Remove Photos
|
||||
Remove-Relationship = Remove Relationship
|
||||
# Hint for a button that removes a vote of agreement
|
||||
Removes-your-vote-of-agreement = Removes your vote of agreement
|
||||
# Hint for a button that removes a vote of disagreement
|
||||
Removes-your-vote-of-disagreement = Removes your vote of disagreement
|
||||
# Quality grade option
|
||||
Research-Grade = Research Grade
|
||||
Reset = Reset
|
||||
@@ -725,7 +780,6 @@ REVIEW-INATURALIST = REVIEW INATURALIST
|
||||
# reviewed the observations or not
|
||||
REVIEWED = REVIEWED
|
||||
Reviewed-observations-only = Reviewed observations only
|
||||
Revoke = Revoke
|
||||
# Label for the satellite map type
|
||||
Satellite--map-type = Satellite
|
||||
# Label for a button that persists something
|
||||
@@ -741,7 +795,9 @@ Saved-Observation = Saved observation, in queue to upload
|
||||
Scan-the-area-around-you-for-organisms = Scan the area around you for organisms.
|
||||
Scientific-Name = Scientific Name
|
||||
Scientific-Name-Common-Name = Scientific Name (Common Name)
|
||||
# Title for a search interface
|
||||
SEARCH = SEARCH
|
||||
# Title for a search interface
|
||||
Search = Search
|
||||
SEARCH-FOR-A-LOCATION = SEARCH FOR A LOCATION
|
||||
Search-for-a-project = Search for a project
|
||||
@@ -770,6 +826,7 @@ Select-the-identification-you-want-to-add = Select the identification you want t
|
||||
Select-user = Select user
|
||||
Selects-iconic-taxon-X-for-identification = Selects iconic taxon { $iconicTaxon } for identification.
|
||||
Separate-Photos = Separate Photos
|
||||
# Month of September
|
||||
September = September
|
||||
SETTINGS = SETTINGS
|
||||
Settings = Settings
|
||||
@@ -780,6 +837,8 @@ Share-map = Share map
|
||||
SHOP-INATURALIST-MERCH = SHOP INATURALIST MERCH
|
||||
Shop-iNaturalist-Merch = Shop iNaturalist Merch
|
||||
Show-observation-options = Show observation options.
|
||||
# Label for button that shows identification suggestions
|
||||
Shows-identification-suggestions = Shows identification suggestions
|
||||
Shows-iNaturalist-bird-logo = Shows iNaturalist bird logo.
|
||||
Sign-out = Sign out
|
||||
Some-data-privacy-laws = Some data privacy laws, like the European Union's General Data Protection Regulation (GDPR), require explicit consent to transfer personal information from their jurisdictions to other jurisdictions where the legal protection of this information is not considered adequate. As of 2020, the European Union no longer considers the United States to be a jurisdiction that provides adequate legal protection of personal information, specifically because of the possibility of the US government surveilling data entering the US. It is possible other jurisdictions may have the same opinion.
|
||||
@@ -840,7 +899,6 @@ TAXON-NAMES-DISPLAY = TAXON NAMES DISPLAY
|
||||
TAXONOMIC-RANKS = TAXONOMIC RANKS
|
||||
# Header for a block of text describing a taxon's taxonomy
|
||||
TAXONOMY-header = TAXONOMY
|
||||
Taxonomy-Settings = Taxonomy Settings
|
||||
TEACHERS = TEACHERS
|
||||
Teachers-Guide = Teachers' Guide
|
||||
TEAM = TEAM
|
||||
@@ -848,27 +906,21 @@ Terms-of-Use = Terms of Use
|
||||
Text-Box-to-Describe-Reason-for-Flag = Text box to describe reason for flag.
|
||||
The-exact-location-will-be-hidden = The exact location will be hidden publicly, and instead generalized to a larger area. (Threatened and endangered species are automatically obscured).
|
||||
The-iNaturalist-Network = The iNaturalist network is a collection of localized websites that are fully connected to the global iNaturalist community. Network sites are supported by local institutions that promote local use and facilitate the use of data from iNaturalist to benefit local biodiversity.
|
||||
The-iNaturalist-Network-is-a-collection-of-localized-websites = The iNaturalist Network is a collection of localized websites that are fully connected to the global iNaturalist community. Network sites are supported by local institutions that have signed an agreement with iNaturalist to promote local use and benefit local biodiversity. They have access to true coordinates from their countries that are automatically obscured from public view in order to protect threatened species. Your username and password works on all sites that are part of the iNaturalist Network. If you choose to affiliate with a Network site, the local institutions that operate each site will also have access to your email address (only to communicate with you about site activities) and access to the true coordinates for observations that are publicly obscured or private. Note: Please do not experimentally change your affiliation if you have more than 1000 observations.
|
||||
The-iNaturalist-team-has-collaborated = The iNaturalist team has collaborated with...
|
||||
The-location-will-not-be-visible = The location will not be visible to others, which means it may be difficult to identify.
|
||||
There-is-no-way = There is no way to have an iNaturalist account without storing personal information, so the only way to revoke this consent is to delete your account.
|
||||
# Wild status sheet descriptions
|
||||
This-is-a-wild-organism = This is a wild organism and wasn't placed in this location by humans.
|
||||
This-is-how-all-taxon-names-will-be-displayed-to-you-across-iNaturalist = This is how all taxon names will be displayed to you across iNaturalist
|
||||
This-is-how-taxon-names-will-be-displayed = This is how all taxon names will be displayed to you across iNaturalist:
|
||||
This-observer-has-opted-out-of-the-Community-Taxon = This observer has opted out of the Community Taxon
|
||||
This-organism-was-placed-by-humans = This organism was placed in this location by humans. This applies to things like garden plants, pets, and zoo animals.
|
||||
This-sets-your-language-and-date-formatting-preferences-across-iNaturalist = This sets your language and date formatting preferences across iNaturalist based on your locale.
|
||||
This-will-be-your-default-place-for-all-searches-in-Explore-and-Identify = This will be your default place for all searches in Explore and Identify.
|
||||
To-access-all-other-settings = To access all other account settings, click here:
|
||||
To-learn-more-about-what-information = To learn more about what information we collect and how we use it, please see our Privacy Policy and our Terms of Use.
|
||||
To-sync-your-observations-to-iNaturalist = To sync your observations to iNaturalist, please log in.
|
||||
Toggle-map-type = Toggle map type
|
||||
TOP-ID-SUGGESTION = TOP ID SUGGESTION
|
||||
Traditional-Project = Traditional Project
|
||||
Trust-with-hidden-coordinates = Trust with hidden coordinates
|
||||
Umbrella-Project = Umbrella Project
|
||||
Unblock = Unblock
|
||||
UNFOLLOW = UNFOLLOW
|
||||
UNFOLLOW-USER = UNFOLLOW USER?
|
||||
# Text to show when a taxon or identification is unknown or missing
|
||||
@@ -878,7 +930,6 @@ Unknown--user = Unknown
|
||||
# Generic error message
|
||||
Unknown-error = Unknown error
|
||||
Unknown-organism = Unknown organism
|
||||
Unmute = Unmute
|
||||
Unreviewed-observations-only = Unreviewed observations only
|
||||
Upload-Complete = Upload Complete
|
||||
Upload-in-progress = Upload in progress
|
||||
@@ -911,7 +962,6 @@ Use-your-devices-microphone-to-record = Use your device’s microphone to record
|
||||
USER = USER
|
||||
User = User { $userHandle }
|
||||
USERNAME = USERNAME
|
||||
Username = Username
|
||||
# Appears above the text fields
|
||||
USERNAME-OR-EMAIL = USERNAME OR EMAIL
|
||||
Using-iNaturalist-requires-the-storage = Using iNaturalist requires the storage of personal information like your email address, all iNaturalist data is stored in the United States, and we cannot be sure what legal jurisdiction you are in when you are using iNaturalist, so in order to comply with privacy laws like the GDPR, you must acknowledge that you understand and accept this risk and consent to transferring your personal information to iNaturalist's servers in the US.
|
||||
@@ -926,6 +976,8 @@ View-photo = View photo
|
||||
View-photo-licensing-info = View photo licensing info
|
||||
VIEW-PROJECT-REQUIREMENTS = VIEW PROJECT REQUIREMENTS
|
||||
VIEW-PROJECTS = VIEW PROJECTS
|
||||
# Label for a button that shows identification suggestions for an observation
|
||||
# or photo
|
||||
View-suggestions = View suggestions
|
||||
VIEW-TEACHERS-GUIDE = VIEW TEACHERS' GUIDE
|
||||
# Title for a notice informing the user that they are viewing offline
|
||||
@@ -939,8 +991,6 @@ Welcome-to-iNaturalist = Welcome to iNaturalist!
|
||||
Welcome-user = <0>Welcome back,</0><1>{ $userHandle }</1>
|
||||
WHAT-IS-INATURALIST = WHAT IS INATURALIST?
|
||||
Whats-more-by-recording = What's more, by recording and sharing your observations, you'll create research-quality data for scientists working to better understand and protect nature. So if you like recording your findings from the outdoors, or if you just like learning about life, join us!
|
||||
Which-traditional-projects-can-add-your-observations = Which traditional projects can add your observations?
|
||||
Who-can-add-observation-fields-to-my-observations = Who can add observation fields to my observations?
|
||||
WIKIPEDIA = WIKIPEDIA
|
||||
Wild = Wild
|
||||
WILD-STATUS = WILD STATUS
|
||||
|
||||
@@ -52,7 +52,7 @@ const CustomTabBarContainer = ( { navigation }: Props ): Node => {
|
||||
userIconUri: User.uri( currentUser ),
|
||||
testID: "NavButton.personIcon",
|
||||
accessibilityLabel: t( "Observations" ),
|
||||
accessibilityHint: t( "Navigates-to-observations" ),
|
||||
accessibilityHint: t( "Navigates-to-your-observations" ),
|
||||
size: 40,
|
||||
onPress: ( ) => {
|
||||
navigation.navigate( "ObservationsStackNavigator", {
|
||||
|
||||
@@ -19,6 +19,7 @@ export { default as useRemoteObservation } from "./useRemoteObservation";
|
||||
export { default as useShare } from "./useShare";
|
||||
export { default as useStoredLayout } from "./useStoredLayout";
|
||||
export { default as useTaxon } from "./useTaxon";
|
||||
export { default as useTaxonSearch } from "./useTaxonSearch";
|
||||
export { default as useTranslation } from "./useTranslation";
|
||||
export { default as useUserLocation } from "./useUserLocation";
|
||||
export { default as useUserMe } from "./useUserMe";
|
||||
|
||||
@@ -72,7 +72,7 @@ describe( "StandardCamera navigation", ( ) => {
|
||||
await actor.press( cameraButton );
|
||||
const takePhotoButton = await screen.findByLabelText( /Take photo/ );
|
||||
await actor.press( takePhotoButton );
|
||||
const checkmarkButton = await screen.findByLabelText( "Checkmark" );
|
||||
const checkmarkButton = await screen.findByLabelText( "View suggestions" );
|
||||
await actor.press( checkmarkButton );
|
||||
expect( await screen.findByText( /ADD AN ID/ ) ).toBeVisible( );
|
||||
} );
|
||||
|
||||
@@ -154,7 +154,7 @@ exports[`CustomTabBar should render correctly 1`] = `
|
||||
</View>
|
||||
</View>
|
||||
<View
|
||||
accessibilityHint="Navigates to explore."
|
||||
accessibilityHint="Navigates to explore"
|
||||
accessibilityLabel="Explore"
|
||||
accessibilityRole="button"
|
||||
accessibilityState={
|
||||
@@ -381,7 +381,7 @@ exports[`CustomTabBar should render correctly 1`] = `
|
||||
</BVLinearGradient>
|
||||
</View>
|
||||
<View
|
||||
accessibilityHint="Navigates to observations."
|
||||
accessibilityHint="Navigates to your observations"
|
||||
accessibilityLabel="Observations"
|
||||
accessibilityRole="button"
|
||||
accessibilityState={
|
||||
|
||||
@@ -172,6 +172,6 @@ describe( "ActivityHeaderKebabMenu", () => {
|
||||
expect( await screen.findByTestId( "KebabMenu.Button" ) ).toBeTruthy( );
|
||||
fireEvent.press( await screen.findByTestId( "KebabMenu.Button" ) );
|
||||
fireEvent.press( await screen.findByText( t( "Delete-comment" ) ) );
|
||||
expect( await screen.findByText( t( "DELETE-COMMENT-QUESTION" ) ) ).toBeTruthy( );
|
||||
expect( await screen.findByText( t( "DELETE-COMMENT--question" ) ) ).toBeTruthy( );
|
||||
} );
|
||||
} );
|
||||
|
||||
@@ -7,6 +7,7 @@ import { renderComponent } from "tests/helpers/render";
|
||||
const rerenderCheckmarkComponent = checked => {
|
||||
renderComponent(
|
||||
<Checkbox
|
||||
accessibilityLabel="Checkmark"
|
||||
text="Checkmark text"
|
||||
isChecked={checked}
|
||||
/>
|
||||
@@ -33,13 +34,19 @@ describe( "Checkbox", () => {
|
||||
} );
|
||||
|
||||
it( "has no accessibility errors", () => {
|
||||
const checkbox = <Checkbox text="Checkmark text" isChecked />;
|
||||
const checkbox = <Checkbox accessibilityLabel="Checkmark" text="Checkmark text" isChecked />;
|
||||
|
||||
expect( checkbox ).toBeAccessible();
|
||||
} );
|
||||
|
||||
it( "renders an empty checkbox when isChecked is false", () => {
|
||||
renderComponent( <Checkbox text="Checkmark text" isChecked={false} /> );
|
||||
renderComponent(
|
||||
<Checkbox
|
||||
accessibilityLabel="Checkmark"
|
||||
text="Checkmark text"
|
||||
isChecked={false}
|
||||
/>
|
||||
);
|
||||
|
||||
const checkmark = screen.getByLabelText( /Checkmark/ );
|
||||
|
||||
@@ -52,7 +59,7 @@ describe( "Checkbox", () => {
|
||||
} );
|
||||
|
||||
it( "renders a green filled checkbox when isChecked is true", () => {
|
||||
renderComponent( <Checkbox text="Checkmark text" isChecked /> );
|
||||
renderComponent( <Checkbox accessibilityLabel="Checkmark" text="Checkmark text" isChecked /> );
|
||||
|
||||
const checkmark = screen.getByLabelText( /Checkmark/ );
|
||||
expect( checkmark ).toHaveProp( "innerIconStyle", {
|
||||
@@ -66,6 +73,7 @@ describe( "Checkbox", () => {
|
||||
let checked = false;
|
||||
renderComponent(
|
||||
<Checkbox
|
||||
accessibilityLabel="Checkmark"
|
||||
text="Checkmark text"
|
||||
isChecked={checked}
|
||||
// eslint-disable-next-line no-return-assign
|
||||
@@ -84,10 +92,10 @@ describe( "Checkbox", () => {
|
||||
let checked = true;
|
||||
renderComponent(
|
||||
<Checkbox
|
||||
accessibilityLabel="Checkmark"
|
||||
text="Checkmark text"
|
||||
isChecked={checked}
|
||||
// eslint-disable-next-line no-return-assign
|
||||
onPress={( ) => ( checked = !checked )}
|
||||
onPress={( ) => { checked = !checked; }}
|
||||
/>
|
||||
);
|
||||
const checkmark = screen.getByLabelText( /Checkmark/ );
|
||||
@@ -103,8 +111,7 @@ describe( "Checkbox", () => {
|
||||
<Checkbox
|
||||
text="Checkmark text"
|
||||
isChecked={checked}
|
||||
// eslint-disable-next-line no-return-assign
|
||||
onPress={( ) => ( checked = !checked )}
|
||||
onPress={( ) => { checked = !checked; }}
|
||||
/>
|
||||
);
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
exports[`InlineUser renders reliably 1`] = `
|
||||
<View
|
||||
accessibilityHint="Navigates to user profile."
|
||||
accessibilityHint="Navigates to user profile"
|
||||
accessibilityLabel="User @some_login"
|
||||
accessibilityRole="link"
|
||||
accessibilityState={
|
||||
@@ -96,7 +96,7 @@ exports[`InlineUser renders reliably 1`] = `
|
||||
|
||||
exports[`InlineUser when offline renders reliably 1`] = `
|
||||
<View
|
||||
accessibilityHint="Navigates to user profile."
|
||||
accessibilityHint="Navigates to user profile"
|
||||
accessibilityLabel="User @some_login"
|
||||
accessibilityRole="link"
|
||||
accessibilityState={
|
||||
@@ -209,7 +209,7 @@ exports[`InlineUser when offline renders reliably 1`] = `
|
||||
|
||||
exports[`InlineUser when user has no icon set renders reliably 1`] = `
|
||||
<View
|
||||
accessibilityHint="Navigates to user profile."
|
||||
accessibilityHint="Navigates to user profile"
|
||||
accessibilityLabel="User @some_login"
|
||||
accessibilityRole="link"
|
||||
accessibilityState={
|
||||
|
||||
@@ -19,6 +19,7 @@ describe( "TaxonResult", () => {
|
||||
it( "should render correctly", () => {
|
||||
render(
|
||||
<TaxonResult
|
||||
accessibilityLabel="this is the taxon"
|
||||
taxon={mockTaxon}
|
||||
/>
|
||||
);
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
|
||||
exports[`Checkbox renders reliably 1`] = `
|
||||
<View
|
||||
accessibilityLabel="Checkmark"
|
||||
accessibilityRole="radio"
|
||||
accessibilityState={
|
||||
{
|
||||
@@ -172,7 +171,6 @@ exports[`Checkbox renders reliably 1`] = `
|
||||
|
||||
exports[`Checkbox renders reliably being checked 1`] = `
|
||||
<View
|
||||
accessibilityLabel="Checkmark"
|
||||
accessibilityRole="radio"
|
||||
accessibilityState={
|
||||
{
|
||||
|
||||
@@ -514,8 +514,7 @@ exports[`TaxonResult should render correctly 1`] = `
|
||||
</View>
|
||||
</View>
|
||||
<View
|
||||
accessibilityHint="Add this identification"
|
||||
accessibilityLabel="Checkmark"
|
||||
accessibilityLabel="this is the taxon"
|
||||
accessibilityRole="button"
|
||||
accessibilityState={
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user