i18n all the strings (cont'd.)

This commit is contained in:
Akinwale Ariwodola 2019-11-14 13:42:56 +01:00
parent 74ab2ecb93
commit 3798e49f27
26 changed files with 295 additions and 282 deletions

View file

@ -1,32 +0,0 @@
{
"Content Interests": "Content Interests",
"Suggested channels": "Suggested channels",
"You might also like": "You might also like",
"Follow": "Follow",
"About": "About",
"Sign In": "Sign In",
"SIGN IN": "SIGN IN",
"FREE": "FREE",
"Anonymous": "Anonymous",
"An account with LBRY Inc. allows you to earn rewards, backup your wallet, and keep everything synced.": "An account with LBRY Inc. allows you to earn rewards, backup your wallet, and keep everything synced.",
"Without an account, you assume all responsibility for securing your wallet and LBRY data.": "Without an account, you assume all responsibility for securing your wallet and LBRY data.",
"Skip Account": "Skip Account",
"Sign Up": "Sign Up",
"Balance": "Balance",
"You currently have": "You currently have",
"Receive Credits": "Receive Credits",
"Use this wallet address to receive credits sent by another user (or yourself).": "Use this wallet address to receive credits sent by another user (or yourself).",
"Get new address": "Get new address",
"You can generate a new address at any time, and any previous addresses will continue to work. Using multiple addresses can be helpful for keeping track of incoming payments from multiple sources.": "You can generate a new address at any time, and any previous addresses will continue to work. Using multiple addresses can be helpful for keeping track of incoming payments from multiple sources.",
"Send Credits": "Send Credits",
"Recipient address": "Recipient address",
"Amount": "Amount",
"View All": "View All",
"Looks like you don't have any recent transactions.": "Looks like you don't have any recent transactions.",
"Wallet Sync": "Wallet Sync",
"Sync status": "Sync status",
"Off": "Off",
"Manual backup": "Manual backup",
"Sync FAQ": "Sync FAQ",
"Fetching transactions...": "Fetching transactions..."
}

View file

@ -67,7 +67,7 @@ class AboutPage extends React.PureComponent {
render() {
const { accessToken, drawerStack, navigation, notify, popDrawerStack, userEmail } = this.props;
const loading = 'Loading...';
const loading = __('Loading...');
const ver = this.state.versionInfo ? this.state.versionInfo : null;
return (
@ -76,20 +76,20 @@ class AboutPage extends React.PureComponent {
<ScrollView style={aboutStyle.scrollContainer}>
<Text style={aboutStyle.title}>Content Freedom</Text>
<Text style={aboutStyle.paragraph}>
LBRY is a free, open, and community-run digital marketplace. It is a decentralized peer-to-peer content
distribution platform for creators to upload and share content, and earn LBRY credits for their effort.
Users will be able to find a wide selection of videos, music, ebooks and other digital content they are
interested in.
{__(
'LBRY is a free, open, and community-run digital marketplace. It is a decentralized peer-to-peer content distribution platform for creators to upload and share content, and earn LBRY credits for their effort. Users will be able to find a wide selection of videos, music, ebooks and other digital content they are interested in.'
)}
</Text>
<View style={aboutStyle.links}>
<Link style={aboutStyle.link} href="https://lbry.com/faq/what-is-lbry" text="What is LBRY?" />
<Link style={aboutStyle.link} href="https://lbry.com/faq/android-basics" text="Android App Basics" />
<Link style={aboutStyle.link} href="https://lbry.com/faq" text="Frequently Asked Questions" />
<Link style={aboutStyle.link} href="https://lbry.com/faq/what-is-lbry" text={__('What is LBRY?')} />
<Link style={aboutStyle.link} href="https://lbry.com/faq/android-basics" text={__('Android App Basics')} />
<Link style={aboutStyle.link} href="https://lbry.com/faq" text={__('Frequently Asked Questions')} />
</View>
<Text style={aboutStyle.socialTitle}>Get Social</Text>
<Text style={aboutStyle.paragraph}>
You can interact with the LBRY team and members of the community on Discord, Facebook, Instagram, Twitter or
Reddit.
{__(
'You can interact with the LBRY team and members of the community on Discord, Facebook, Instagram, Twitter or Reddit.'
)}
</Text>
<View style={aboutStyle.links}>
<Link style={aboutStyle.link} href="https://discordapp.com/invite/Z3bERWA" text="Discord" />
@ -99,12 +99,12 @@ class AboutPage extends React.PureComponent {
<Link style={aboutStyle.link} href="https://reddit.com/r/lbry" text="Reddit" />
<Link style={aboutStyle.link} href="https://t.me/lbryofficial" text="Telegram" />
</View>
<Text style={aboutStyle.releaseInfoTitle}>App info</Text>
<Text style={aboutStyle.releaseInfoTitle}>{__('App info')}</Text>
{userEmail && userEmail.trim().length > 0 && (
<View style={aboutStyle.verticalRow}>
<View style={aboutStyle.innerRow}>
<View style={aboutStyle.col}>
<Text style={aboutStyle.text}>Connected email</Text>
<Text style={aboutStyle.text}>{__('Connected email')}</Text>
</View>
<View style={aboutStyle.col}>
<Text selectable style={aboutStyle.valueText}>
@ -116,7 +116,7 @@ class AboutPage extends React.PureComponent {
<Link
style={aboutStyle.listLink}
href={`http://lbry.com/list/edit/${accessToken}`}
text="Update mailing preferences"
text={__('Update mailing preferences')}
/>
</View>
</View>
@ -124,7 +124,7 @@ class AboutPage extends React.PureComponent {
<View style={aboutStyle.row}>
<View style={aboutStyle.col}>
<Text style={aboutStyle.text}>App version</Text>
<Text style={aboutStyle.text}>{__('App version')}</Text>
</View>
<View style={aboutStyle.col}>
<Text selectable style={aboutStyle.valueText}>
@ -135,7 +135,7 @@ class AboutPage extends React.PureComponent {
<View style={aboutStyle.row}>
<View style={aboutStyle.col}>
<Text style={aboutStyle.text}>LBRY SDK</Text>
<Text style={aboutStyle.text}>{__('LBRY SDK')}</Text>
</View>
<View style={aboutStyle.col}>
<Text selectable style={aboutStyle.valueText}>
@ -146,7 +146,7 @@ class AboutPage extends React.PureComponent {
<View style={aboutStyle.row}>
<View style={aboutStyle.col}>
<Text style={aboutStyle.text}>Platform</Text>
<Text style={aboutStyle.text}>{__('Platform')}</Text>
</View>
<View style={aboutStyle.col}>
<Text selectable style={aboutStyle.valueText}>
@ -157,7 +157,7 @@ class AboutPage extends React.PureComponent {
<View style={aboutStyle.row}>
<View style={aboutStyle.col}>
<Text style={aboutStyle.text}>Installation ID</Text>
<Text style={aboutStyle.text}>{__('Installation ID')}</Text>
<Text selectable style={aboutStyle.lineValueText}>
{this.state.lbryId ? this.state.lbryId : loading}
</Text>
@ -166,12 +166,12 @@ class AboutPage extends React.PureComponent {
<View style={aboutStyle.row}>
<View style={aboutStyle.col}>
<Text style={aboutStyle.text}>Logs</Text>
<Text style={aboutStyle.text}>{__('Logs')}</Text>
</View>
<View style={aboutStyle.col}>
<Link
style={aboutStyle.listLink}
text="Send log"
text={__('Send log')}
onPress={() => {
if (NativeModules.UtilityModule) {
NativeModules.UtilityModule.shareLogFile(error => {

View file

@ -121,7 +121,7 @@ class ChannelPage extends React.PureComponent {
return (
<View style={channelPageStyle.aboutTab}>
<View style={channelPageStyle.busyContainer}>
<Text style={channelPageStyle.infoText}>No information to display.</Text>
<Text style={channelPageStyle.infoText}>{__('No information to display.')}</Text>
</View>
</View>
);
@ -131,21 +131,21 @@ class ChannelPage extends React.PureComponent {
return (
<View style={channelPageStyle.aboutTab}>
{!websiteUrl && !email && !description && (
<EmptyStateView message={"There's nothing here yet.\nPlease check back later."} />
<EmptyStateView message={__("There's nothing here yet.\nPlease check back later.")} />
)}
{(websiteUrl || email || description) && (
<ScrollView style={channelPageStyle.aboutScroll} contentContainerStyle={channelPageStyle.aboutScrollContent}>
{websiteUrl && websiteUrl.trim().length > 0 && (
<View style={channelPageStyle.aboutItem}>
<Text style={channelPageStyle.aboutTitle}>Website</Text>
<Text style={channelPageStyle.aboutTitle}>{__('Website')}</Text>
<Link style={channelPageStyle.aboutText} text={websiteUrl} href={websiteUrl} />
</View>
)}
{email && email.trim().length > 0 && (
<View style={channelPageStyle.aboutItem}>
<Text style={channelPageStyle.aboutTitle}>Email</Text>
<Text style={channelPageStyle.aboutTitle}>{__('Email')}</Text>
<Link style={channelPageStyle.aboutText} text={email} href={`mailto:${email}`} />
</View>
)}

View file

@ -793,8 +793,8 @@ export default class ChannelCreator extends React.PureComponent {
{currentPhase === Constants.PHASE_LIST && !fetchingChannels && !hasChannels && (
<EmptyStateView
message={'You have not created a channel.\nStart now by creating a new channel!'}
buttonText={'Create a channel'}
message={__('You have not created a channel.\nStart now by creating a new channel!')}
buttonText={__('Create a channel')}
onButtonPress={this.handleNewChannelPress}
/>
)}
@ -807,7 +807,7 @@ export default class ChannelCreator extends React.PureComponent {
<View style={channelCreatorStyle.listFooter}>
<Button
style={channelCreatorStyle.createChannelButton}
text={'Create a channel'}
text={__('Create a channel')}
onPress={this.handleNewChannelPress}
/>
</View>
@ -879,7 +879,7 @@ export default class ChannelCreator extends React.PureComponent {
{this.state.uploadingImage && (
<View style={channelCreatorStyle.uploadProgress}>
<ActivityIndicator size={'small'} color={Colors.NextLbryGreen} />
<Text style={channelCreatorStyle.uploadText}>Uploading image...</Text>
<Text style={channelCreatorStyle.uploadText}>{__('Uploading image...')}</Text>
</View>
)}
</TouchableOpacity>
@ -911,14 +911,14 @@ export default class ChannelCreator extends React.PureComponent {
<View style={channelCreatorStyle.textInputLayout}>
{(this.state.titleFocused ||
(this.state.newChannelTitle != null && this.state.newChannelTitle.trim().length > 0)) && (
<Text style={channelCreatorStyle.textInputTitle}>Title</Text>
<Text style={channelCreatorStyle.textInputTitle}>{__('Title')}</Text>
)}
<TextInput
editable={canSave && !creatingChannel && !updatingChannel}
style={channelCreatorStyle.inputText}
value={this.state.newChannelTitle}
onChangeText={this.handleNewChannelTitleChange}
placeholder={this.state.titleFocused ? '' : 'Title'}
placeholder={this.state.titleFocused ? '' : __('Title')}
underlineColorAndroid={Colors.NextLbryGreen}
onFocus={() => this.setState({ titleFocused: true })}
onBlur={() => this.setState({ titleFocused: false })}
@ -928,7 +928,7 @@ export default class ChannelCreator extends React.PureComponent {
<View style={channelCreatorStyle.channelInputLayout}>
{(this.state.channelNameFocused ||
(this.state.newChannelName != null && this.state.newChannelName.trim().length > 0)) && (
<Text style={channelCreatorStyle.textInputTitle}>Channel</Text>
<Text style={channelCreatorStyle.textInputTitle}>{__('Channel')}</Text>
)}
<View>
<Text style={channelCreatorStyle.channelAt}>@</Text>
@ -937,7 +937,7 @@ export default class ChannelCreator extends React.PureComponent {
style={channelCreatorStyle.channelNameInput}
value={this.state.newChannelName}
onChangeText={value => this.handleNewChannelNameChange(value, true)}
placeholder={this.state.channelNameFocused ? '' : 'Channel'}
placeholder={this.state.channelNameFocused ? '' : __('Channel')}
underlineColorAndroid={Colors.NextLbryGreen}
onFocus={() => this.setState({ channelNameFocused: true })}
onBlur={() => this.setState({ channelNameFocused: false })}
@ -948,11 +948,13 @@ export default class ChannelCreator extends React.PureComponent {
<Text style={channelCreatorStyle.inlineError}>{newChannelNameError}</Text>
)}
{editMode && (
<Text style={channelCreatorStyle.helpText}>The channel name cannot be changed while editing.</Text>
<Text style={channelCreatorStyle.helpText}>
{__('The channel name cannot be changed while editing.')}
</Text>
)}
<View style={channelCreatorStyle.bidRow}>
<Text style={channelCreatorStyle.label}>Deposit</Text>
<Text style={channelCreatorStyle.label}>{__('Deposit')}</Text>
<TextInput
editable={canSave && !creatingChannel && !updatingChannel}
style={channelCreatorStyle.bidAmountInput}
@ -965,7 +967,7 @@ export default class ChannelCreator extends React.PureComponent {
<Text style={channelCreatorStyle.currency}>LBC</Text>
</View>
<Text style={channelCreatorStyle.helpText}>
This LBC remains yours. It is a deposit to reserve the name and can be undone at any time.
{__('This LBC remains yours. It is a deposit to reserve the name and can be undone at any time.')}
</Text>
</View>
@ -974,7 +976,7 @@ export default class ChannelCreator extends React.PureComponent {
<View style={channelCreatorStyle.textInputLayout}>
{(this.state.descriptionFocused ||
(this.state.description != null && this.state.description.trim().length > 0)) && (
<Text style={channelCreatorStyle.textInputTitle}>Description</Text>
<Text style={channelCreatorStyle.textInputTitle}>{__('Description')}</Text>
)}
<TextInput
editable={canSave && !creatingChannel && !updatingChannel}
@ -982,7 +984,7 @@ export default class ChannelCreator extends React.PureComponent {
multiline
value={this.state.description}
onChangeText={this.handleDescriptionChange}
placeholder={this.state.descriptionFocused ? '' : 'Description'}
placeholder={this.state.descriptionFocused ? '' : __('Description')}
underlineColorAndroid={Colors.NextLbryGreen}
onFocus={() => this.setState({ descriptionFocused: true })}
onBlur={() => this.setState({ descriptionFocused: false })}
@ -992,14 +994,14 @@ export default class ChannelCreator extends React.PureComponent {
<View style={channelCreatorStyle.textInputLayout}>
{(this.state.websiteFocused ||
(this.state.website != null && this.state.website.trim().length > 0)) && (
<Text style={channelCreatorStyle.textInputTitle}>Website</Text>
<Text style={channelCreatorStyle.textInputTitle}>{__('Website')}</Text>
)}
<TextInput
editable={canSave && !creatingChannel && !updatingChannel}
style={channelCreatorStyle.inputText}
value={this.state.website}
onChangeText={this.handleWebsiteChange}
placeholder={this.state.websiteFocused ? '' : 'Website'}
placeholder={this.state.websiteFocused ? '' : __('Website')}
underlineColorAndroid={Colors.NextLbryGreen}
onFocus={() => this.setState({ websiteFocused: true })}
onBlur={() => this.setState({ websiteFocused: false })}
@ -1008,14 +1010,14 @@ export default class ChannelCreator extends React.PureComponent {
<View style={channelCreatorStyle.textInputLayout}>
{(this.state.emailFocused || (this.state.email != null && this.state.email.trim().length > 0)) && (
<Text style={channelCreatorStyle.textInputTitle}>Email</Text>
<Text style={channelCreatorStyle.textInputTitle}>{__('Email')}</Text>
)}
<TextInput
editable={canSave && !creatingChannel && !updatingChannel}
style={channelCreatorStyle.inputText}
value={this.state.email}
onChangeText={this.handleEmailChange}
placeholder={this.state.emailFocused ? '' : 'Email'}
placeholder={this.state.emailFocused ? '' : __('Email')}
underlineColorAndroid={Colors.NextLbryGreen}
onFocus={() => this.setState({ emailFocused: true })}
onBlur={() => this.setState({ emailFocused: false })}
@ -1026,7 +1028,7 @@ export default class ChannelCreator extends React.PureComponent {
{this.state.showOptionalFields && (
<View style={channelCreatorStyle.card}>
<Text style={channelCreatorStyle.cardTitle}>Tags</Text>
<Text style={channelCreatorStyle.cardTitle}>{__('Tags')}</Text>
<View style={channelCreatorStyle.tagList}>
{this.state.tags &&
this.state.tags.map(tag => (
@ -1050,7 +1052,7 @@ export default class ChannelCreator extends React.PureComponent {
<View style={channelCreatorStyle.toggleContainer}>
<Link
text={this.state.showOptionalFields ? 'Hide optional fields' : 'Show optional fields'}
text={this.state.showOptionalFields ? __('Hide optional fields') : __('Show optional fields')}
onPress={this.handleModePressed}
style={channelCreatorStyle.modeLink}
/>
@ -1062,11 +1064,11 @@ export default class ChannelCreator extends React.PureComponent {
)}
{!creatingChannel && !updatingChannel && (
<View style={channelCreatorStyle.buttons}>
<Link style={channelCreatorStyle.cancelLink} text="Cancel" onPress={this.handleCreateCancel} />
<Link style={channelCreatorStyle.cancelLink} text={__('Cancel')} onPress={this.handleCreateCancel} />
<Button
style={channelCreatorStyle.createButton}
disabled={!canSave || uploadingImage}
text={editMode ? 'Update' : 'Create'}
text={editMode ? __('Update') : __('Create')}
onPress={this.handleCreateChannelClick}
/>
</View>

View file

@ -175,16 +175,18 @@ class DiscoverPage extends React.PureComponent {
if (!isNaN(lastShownTime) && !isNaN(lastShownCount)) {
if (now > lastShownTime + Constants.RATING_REMINDER_INTERVAL * lastShownCount) {
Alert.alert(
'Enjoying LBRY?',
'Are you enjoying your experience with the LBRY app? You can leave a review for us on the Play Store.',
__('Enjoying LBRY?'),
__(
'Are you enjoying your experience with the LBRY app? You can leave a review for us on the Play Store.'
),
[
{
text: 'Never ask again',
text: __('Never ask again'),
onPress: () => setClientSetting(Constants.SETTING_RATING_REMINDER_DISABLED, 'true'),
},
{ text: 'Maybe later', onPress: () => this.updateRatingReminderShown(lastShownCount) },
{ text: __('Maybe later'), onPress: () => this.updateRatingReminderShown(lastShownCount) },
{
text: 'Rate app',
text: __('Rate app'),
onPress: () => {
setClientSetting(Constants.SETTING_RATING_REMINDER_DISABLED, 'true');
Linking.openURL(Constants.PLAY_STORE_URL);
@ -211,7 +213,7 @@ class DiscoverPage extends React.PureComponent {
buildSections = () => {
return this.state.tagCollection.map(tags => ({
title: tags.length === 1 ? tags[0] : 'All tags you follow',
title: tags.length === 1 ? tags[0] : __('All tags you follow'),
data: [tags],
}));
};
@ -235,7 +237,7 @@ class DiscoverPage extends React.PureComponent {
handleTagPress = name => {
const { navigation, sortByItem } = this.props;
if (name.toLowerCase() !== 'all tags you follow') {
if (name.toLowerCase() !== __('all tags you follow')) {
navigation.navigate({
routeName: Constants.DRAWER_ROUTE_TAG,
key: `tagPage`,
@ -273,7 +275,7 @@ class DiscoverPage extends React.PureComponent {
<Link
style={discoverStyle.customizeLink}
text={'Customize'}
text={__('Customize')}
onPress={() => this.setState({ showModalTagSelector: true })}
/>
</View>
@ -289,7 +291,7 @@ class DiscoverPage extends React.PureComponent {
return (
<View style={discoverStyle.footer}>
<Text style={discoverStyle.footerTitle}>More tags you follow</Text>
<Text style={discoverStyle.footerTitle}>{__('More tags you follow')}</Text>
<View style={discoverStyle.footerTags}>
{remainingTags.map(tag => (
<Text

View file

@ -116,12 +116,12 @@ class DownloadsPage extends React.PureComponent {
// show confirm alert
Alert.alert(
'Delete files',
'Are you sure you want to delete the selected content?',
__('Delete files'),
__('Are you sure you want to delete the selected content?'),
[
{ text: 'No' },
{ text: __('No') },
{
text: 'Yes',
text: __('Yes'),
onPress: () => {
const uris = Object.keys(selectedClaimsMap);
uris.forEach(uri => {
@ -156,7 +156,7 @@ class DownloadsPage extends React.PureComponent {
/>
{!fetching && !hasDownloads && (
<EmptyStateView message={'You do not have any\ndownloaded content on this device.'} />
<EmptyStateView message={__('You do not have any\ndownloaded content on this device.')} />
)}
<View style={downloadsStyle.subContainer}>

View file

@ -624,7 +624,7 @@ class FilePage extends React.PureComponent {
{isResolvingUri && (
<View style={filePageStyle.busyContainer}>
<ActivityIndicator size="large" color={Colors.NextLbryGreen} />
<Text style={filePageStyle.infoText}>Loading decentralized data...</Text>
<Text style={filePageStyle.infoText}>{__('Loading decentralized data...')}</Text>
</View>
)}
{claim === null && !isResolvingUri && (
@ -633,15 +633,15 @@ class FilePage extends React.PureComponent {
<EmptyStateView
message={
isChannel
? 'It looks like you just created this channel. It will appear in a few minutes.'
: 'It looks you just published this content. It will appear in a few minutes.'
? __('It looks like you just created this channel. It will appear in a few minutes.')
: __('It looks you just published this content. It will appear in a few minutes.')
}
/>
)}
{!ownedClaim && (
<EmptyStateView
message={"There's nothing at this location."}
buttonText={'Publish something here'}
message={__("There's nothing at this location.")}
buttonText={__('Publish something here')}
onButtonPress={() =>
navigation.navigate({
routeName: Constants.DRAWER_ROUTE_PUBLISH,
@ -679,10 +679,11 @@ class FilePage extends React.PureComponent {
<View style={filePageStyle.pageContainer}>
<View style={filePageStyle.dmcaContainer}>
<Text style={filePageStyle.dmcaText}>
In response to a complaint we received under the US Digital Millennium Copyright Act, we have blocked
access to this content from our applications.
{__(
'In response to a complaint we received under the US Digital Millennium Copyright Act, we have blocked access to this content from our applications.'
)}
</Text>
<Link style={filePageStyle.dmcaLink} href="https://lbry.com/faq/dmca" text="Read More" />
<Link style={filePageStyle.dmcaLink} href="https://lbry.com/faq/dmca" text={__('Read More')} />
</View>
<UriBar value={uri} navigation={navigation} />
</View>
@ -825,7 +826,7 @@ class FilePage extends React.PureComponent {
source={require('../../assets/gerbil-happy.png')}
/>
<View style={filePageStyle.unspportedContentTextContainer}>
<Text style={filePageStyle.unsupportedContentTitle}>Unsupported Content</Text>
<Text style={filePageStyle.unsupportedContentTitle}>{__('Unsupported Content')}</Text>
<Text style={filePageStyle.unsupportedContentText}>
Sorry, we are unable to display this content in the app. You can find the file named{' '}
<Text style={filePageStyle.unsupportedContentFilename}>{fileInfo.file_name}</Text> in your
@ -912,7 +913,7 @@ class FilePage extends React.PureComponent {
style={[filePageStyle.actionButton, filePageStyle.editButton]}
theme={'light'}
icon={'edit'}
text={'Edit'}
text={__('Edit')}
onPress={this.onEditPressed}
/>
)}
@ -922,7 +923,7 @@ class FilePage extends React.PureComponent {
style={filePageStyle.actionButton}
theme={'light'}
icon={'trash-alt'}
text={'Delete'}
text={__('Delete')}
onPress={this.onDeletePressed}
/>
)}
@ -935,7 +936,7 @@ class FilePage extends React.PureComponent {
style={filePageStyle.actionButton}
icon={'stop'}
theme={'light'}
text={'Stop Download'}
text={__('Stop Download')}
onPress={this.onStopDownloadPressed}
/>
)}
@ -969,7 +970,7 @@ class FilePage extends React.PureComponent {
<View style={filePageStyle.largeButtonsRow}>
<TouchableOpacity style={filePageStyle.largeButton} onPress={this.handleSharePress}>
<Icon name={'share-alt'} size={20} style={filePageStyle.largeButtonIcon} />
<Text style={filePageStyle.largeButtonText}>Share</Text>
<Text style={filePageStyle.largeButtonText}>{__('Share')}</Text>
</TouchableOpacity>
<TouchableOpacity
@ -977,7 +978,7 @@ class FilePage extends React.PureComponent {
onPress={() => this.setState({ showTipView: true })}
>
<Icon name={'gift'} size={20} style={filePageStyle.largeButtonIcon} />
<Text style={filePageStyle.largeButtonText}>Tip</Text>
<Text style={filePageStyle.largeButtonText}>{__('Tip')}</Text>
</TouchableOpacity>
<TouchableOpacity
@ -985,7 +986,7 @@ class FilePage extends React.PureComponent {
onPress={() => Linking.openURL(`https://lbry.com/dmca/${claim.claim_id}`)}
>
<Icon name={'flag'} size={20} style={filePageStyle.largeButtonIcon} />
<Text style={filePageStyle.largeButtonText}>Report</Text>
<Text style={filePageStyle.largeButtonText}>{__('Report')}</Text>
</TouchableOpacity>
</View>
@ -1011,7 +1012,7 @@ class FilePage extends React.PureComponent {
)}
{!channelName && (
<Text style={filePageStyle.anonChannelName} selectable ellipsizeMode={'tail'}>
Anonymous
{__('Anonymous')}
</Text>
)}
<DateTime
@ -1070,11 +1071,11 @@ class FilePage extends React.PureComponent {
{this.state.sendTipStarted && <ActivityIndicator size={'small'} color={Colors.NextLbryGreen} />}
<Link
style={[filePageStyle.link, filePageStyle.cancelTipLink]}
text={'Cancel'}
text={__('Cancel')}
onPress={() => this.setState({ showTipView: false })}
/>
<Button
text={'Send a tip'}
text={__('Send a tip')}
style={[filePageStyle.button, filePageStyle.sendButton]}
disabled={!canSendTip || this.state.sendTipStarted}
onPress={this.handleSendTip}

View file

@ -3,7 +3,7 @@ import { Lbry } from 'lbry-redux';
import { NativeModules, Platform, Text, TextInput, View } from 'react-native';
import AsyncStorage from '@react-native-community/async-storage';
import Colors from 'styles/colors';
import Constants from 'constants';
import Constants from 'constants'; // eslint-disable-line node/no-deprecated-api
import firstRunStyle from 'styles/firstRun';
class EmailCollectPage extends React.PureComponent {
@ -44,7 +44,7 @@ class EmailCollectPage extends React.PureComponent {
const content = (
<View onLayout={() => onEmailViewLayout('collect')}>
<Text style={firstRunStyle.title}>Setup account</Text>
<Text style={firstRunStyle.title}>{__('Setup account')}</Text>
<TextInput
style={firstRunStyle.emailInput}
placeholder={this.state.placeholder}
@ -64,10 +64,10 @@ class EmailCollectPage extends React.PureComponent {
}}
/>
<Text style={firstRunStyle.paragraph}>
An account will allow you to earn rewards and keep your account and settings synced.
{__('An account will allow you to earn rewards and keep your account and settings synced.')}
</Text>
<Text style={firstRunStyle.infoParagraph}>
This information is disclosed only to LBRY, Inc. and not to the LBRY network.
{__('This information is disclosed only to LBRY, Inc. and not to the LBRY network.')}
</Text>
</View>
);

View file

@ -4,7 +4,7 @@ import { ActivityIndicator, Linking, NativeModules, Platform, Switch, Text, Text
import AsyncStorage from '@react-native-community/async-storage';
import Button from 'component/button';
import Colors from 'styles/colors';
import Constants from 'constants';
import Constants from 'constants'; // eslint-disable-line node/no-deprecated-api
import Icon from 'react-native-vector-icons/FontAwesome5';
import firstRunStyle from 'styles/firstRun';
@ -13,7 +13,7 @@ class EmailVerifyPage extends React.PureComponent {
const { email, notify, resendVerificationEmail } = this.props;
resendVerificationEmail(email);
AsyncStorage.setItem(Constants.KEY_EMAIL_VERIFY_PENDING, 'true');
notify({ message: 'Please follow the instructions in the email sent to your address to continue.' });
notify({ message: __('Please follow the instructions in the email sent to your address to continue.') });
};
render() {

View file

@ -28,10 +28,10 @@ class SkipAccountPage extends React.PureComponent {
<View onLayout={onSkipAccountViewLayout}>
<View style={firstRunStyle.row}>
<Icon name="exclamation-triangle" style={firstRunStyle.titleIcon} size={32} color={Colors.White} />
<Text style={firstRunStyle.title}>Are you sure?</Text>
<Text style={firstRunStyle.title}>{__('Are you sure?')}</Text>
</View>
<Text style={firstRunStyle.paragraph}>
Without an account, you will not receive rewards, sync and backup services, or security updates.
{__('Without an account, you will not receive rewards, sync and backup services, or security updates.')}
</Text>
<View style={[firstRunStyle.row, firstRunStyle.confirmContainer]}>
@ -45,8 +45,9 @@ class SkipAccountPage extends React.PureComponent {
/>
</View>
<Text style={firstRunStyle.rowParagraph}>
I understand that by uninstalling LBRY I will lose any balances or published content with no recovery option
if it is not backed up manually (see wallet page)
{__(
'I understand that by uninstalling LBRY I will lose any balances or published content with no recovery option if it is not backed up manually (see wallet page)'
)}
</Text>
</View>
</View>

View file

@ -76,14 +76,16 @@ class WalletPage extends React.PureComponent {
content = (
<View style={firstRunStyle.centered}>
<ActivityIndicator size="large" color={Colors.White} style={firstRunStyle.waiting} />
<Text style={firstRunStyle.paragraph}>Retrieving your account information...</Text>
<Text style={firstRunStyle.paragraph}>{__('Retrieving your account information...')}</Text>
</View>
);
} else if (syncApplyStarted || syncApplyIsPending) {
content = (
<View style={firstRunStyle.centered}>
<ActivityIndicator size="large" color={Colors.White} style={firstRunStyle.waiting} />
<Text style={firstRunStyle.paragraph}>{syncApplyIsPending ? 'Validating password' : 'Synchronizing'}...</Text>
<Text style={firstRunStyle.paragraph}>
{syncApplyIsPending ? __('Validating password') : __('Synchronizing')}...
</Text>
</View>
);
} else {
@ -92,8 +94,8 @@ class WalletPage extends React.PureComponent {
<Text style={firstRunStyle.title}>Password</Text>
<Text style={firstRunStyle.paragraph}>
{hasSyncedWallet
? 'Please enter the password you used to secure your wallet.'
: 'Please enter a password to secure your account and wallet.'}
? __('Please enter the password you used to secure your wallet.')
: __('Please enter a password to secure your account and wallet.')}
</Text>
<View style={firstRunStyle.passwordInputContainer}>
<TextInput
@ -126,8 +128,8 @@ class WalletPage extends React.PureComponent {
<View style={firstRunStyle.passwordWarning}>
<Text style={firstRunStyle.passwordWarningText}>
{hasSyncedWallet
? 'If you did not provide a password, please press Use LBRY to continue.'
: 'You can proceed without a password, but this is not recommended.'}
? __('If you did not provide a password, please press Use LBRY to continue.')
: __('You can proceed without a password, but this is not recommended.')}
</Text>
</View>
)}
@ -142,7 +144,7 @@ class WalletPage extends React.PureComponent {
</View>
)}
<Text style={firstRunStyle.infoParagraph}>
Note: for wallet security purposes, LBRY is unable to reset your password.
{__('Note: for wallet security purposes, LBRY is unable to reset your password.')}
</Text>
</View>
);

View file

@ -87,8 +87,9 @@ class WelcomePage extends React.PureComponent {
content = (
<View>
<Text style={firstRunStyle.paragraph}>
The LBRY servers were unreachable at this time. Please check your Internet connection and then restart the
app to try again.
{__(
'The LBRY servers were unreachable at this time. Please check your Internet connection and then restart the app to try again.'
)}
</Text>
</View>
);
@ -96,7 +97,7 @@ class WelcomePage extends React.PureComponent {
content = (
<View style={firstRunStyle.centered}>
<ActivityIndicator size="large" color={Colors.White} style={firstRunStyle.waiting} />
<Text style={firstRunStyle.paragraph}>Please wait while we get some things ready...</Text>
<Text style={firstRunStyle.paragraph}>{__('Please wait while we get some things ready...')}</Text>
</View>
);
} else {
@ -104,8 +105,9 @@ class WelcomePage extends React.PureComponent {
<View onLayout={onWelcomePageLayout}>
<Text style={firstRunStyle.title}>Welcome to LBRY.</Text>
<Text style={firstRunStyle.paragraph}>
LBRY is a community-controlled content platform where you can find and publish videos, music, books, and
more.
{__(
'LBRY is a community-controlled content platform where you can find and publish videos, music, books, and more.'
)}
</Text>
<Text style={[firstRunStyle.infoParagraph, firstRunStyle.tosParagraph]}>
By continuing, I agree to the{' '}

View file

@ -99,7 +99,7 @@ class FirstRunScreen extends React.PureComponent {
if (unlocked) {
this.closeFinalPage();
} else {
notify({ message: 'The wallet could not be unlocked at this time. Please restart the app.' });
notify({ message: __('The wallet could not be unlocked at this time. Please restart the app.') });
}
}
);
@ -178,7 +178,7 @@ class FirstRunScreen extends React.PureComponent {
}
if (Constants.FIRST_RUN_PAGE_SKIP_ACCOUNT === this.state.currentPage && !this.state.skipAccountConfirmed) {
notify({ message: 'Please confirm that you want to use LBRY without creating an account.' });
notify({ message: __('Please confirm that you want to use LBRY without creating an account.') });
return;
}
@ -204,7 +204,7 @@ class FirstRunScreen extends React.PureComponent {
// validate the email
if (!email || email.indexOf('@') === -1) {
return notify({
message: 'Please provide a valid email address to continue.',
message: __('Please provide a valid email address to continue.'),
});
}
@ -410,27 +410,27 @@ class FirstRunScreen extends React.PureComponent {
<Text style={firstRunStyle.buttonText}>
«{' '}
{Constants.FIRST_RUN_PAGE_SKIP_ACCOUNT === this.state.currentPage
? 'Setup account'
: 'Change email'}
? __('Setup account')
: __('Change email')}
</Text>
</TouchableOpacity>
)}
{!emailNewPending && Constants.FIRST_RUN_PAGE_EMAIL_COLLECT === this.state.currentPage && (
<TouchableOpacity style={firstRunStyle.leftButton} onPress={this.handleLeftButtonPressed}>
<Text style={firstRunStyle.smallLeftButtonText}>No, thanks »</Text>
<Text style={firstRunStyle.smallLeftButtonText}>{__('No, thanks')} »</Text>
</TouchableOpacity>
)}
{!emailNewPending && (
<TouchableOpacity style={firstRunStyle.button} onPress={this.handleContinuePressed}>
{Constants.FIRST_RUN_PAGE_SKIP_ACCOUNT === this.state.currentPage && (
<Text style={firstRunStyle.smallButtonText}>Use LBRY »</Text>
<Text style={firstRunStyle.smallButtonText}>{__('Use LBRY')} »</Text>
)}
{Constants.FIRST_RUN_PAGE_SKIP_ACCOUNT !== this.state.currentPage &&
Constants.FIRST_RUN_PAGE_EMAIL_VERIFY !== this.state.currentPage && (
<Text style={firstRunStyle.buttonText}>
{Constants.FIRST_RUN_PAGE_WALLET === this.state.currentPage ? 'Use LBRY' : 'Continue'} »
{Constants.FIRST_RUN_PAGE_WALLET === this.state.currentPage ? __('Use LBRY') : __('Continue')} »
</Text>
)}
</TouchableOpacity>

View file

@ -48,31 +48,31 @@ import publishStyle from 'styles/publish';
import { navigateToUri, logPublish, uploadImageAsset } from 'utils/helper';
const languages = {
en: 'English',
zh: 'Chinese',
fr: 'French',
de: 'German',
jp: 'Japanese',
ru: 'Russian',
es: 'Spanish',
id: 'Indonesian',
it: 'Italian',
nl: 'Dutch',
tr: 'Turkish',
pl: 'Polish',
ms: 'Malay',
pt: 'Portuguese',
vi: 'Vietnamese',
th: 'Thai',
ar: 'Arabic',
cs: 'Czech',
hr: 'Croatian',
km: 'Cambodian',
ko: 'Korean',
no: 'Norwegian',
ro: 'Romanian',
hi: 'Hindi',
el: 'Greek',
en: __('English'),
zh: __('Chinese'),
fr: __('French'),
de: __('German'),
jp: __('Japanese'),
ru: __('Russian'),
es: __('Spanish'),
id: __('Indonesian'),
it: __('Italian'),
nl: __('Dutch'),
tr: __('Turkish'),
pl: __('Polish'),
ms: __('Malay'),
pt: __('Portuguese'),
vi: __('Vietnamese'),
th: __('Thai'),
ar: __('Arabic'),
cs: __('Czech'),
hr: __('Croatian'),
km: __('Cambodian'),
ko: __('Korean'),
no: __('Norwegian'),
ro: __('Romanian'),
hi: __('Hindi'),
el: __('Greek'),
};
class PublishPage extends React.PureComponent {
@ -345,7 +345,7 @@ class PublishPage extends React.PureComponent {
if (balance < Constants.MINIMUM_TRANSACTION_BALANCE) {
notify({
message: 'Publishing content requires credits. Press the blue bar to get some for free.',
message: __('Publishing content requires credits. Press the blue bar to get some for free.'),
});
if (this.scrollView) {
this.scrollView.scrollTo({ x: 0, y: 0, animated: true });
@ -354,18 +354,18 @@ class PublishPage extends React.PureComponent {
}
if (!title || title.trim().length === 0) {
notify({ message: 'Please provide a title' });
notify({ message: __('Please provide a title') });
return;
}
if (!name) {
notify({ message: 'Please specify an address where people can find your content.' });
notify({ message: __('Please specify an address where people can find your content.') });
return;
}
if (!currentMedia && !editMode) {
// sanity check. normally shouldn't happen
notify({ message: 'No file selected. Please select a video or take a photo before publishing.' });
notify({ message: __('No file selected. Please select a video or take a photo before publishing.') });
return;
}
@ -403,7 +403,7 @@ class PublishPage extends React.PureComponent {
pendingPublishSuccess(pendingClaim);
notify({
message: `Your content was successfully published to ${this.state.uri}. It will be available in a few mintues.`,
message: __('Your content was successfully published. It will be available in a few mintues.'),
});
clearPublishFormState();
this.setState({ publishStarted: false });
@ -553,7 +553,7 @@ class PublishPage extends React.PureComponent {
handleThumbnailUploadFailure = err => {
const { notify } = this.props;
this.setState({ uploadThumbnailStarted: false });
notify({ message: 'The thumbnail could not be uploaded. Please try again.' });
notify({ message: __('The thumbnail could not be uploaded. Please try again.') });
};
onFilePicked = evt => {
@ -586,7 +586,7 @@ class PublishPage extends React.PureComponent {
}
} else {
// could not determine the file path
notify({ message: 'The path could not be determined. Please try a different file.' });
notify({ message: __('The path could not be determined. Please try a different file.') });
}
};
@ -701,7 +701,7 @@ class PublishPage extends React.PureComponent {
}
if (!isNameValid(name, false)) {
notify({ message: 'Your content address contains invalid characters' });
notify({ message: __('Your content address contains invalid characters') });
return;
}
@ -731,7 +731,7 @@ class PublishPage extends React.PureComponent {
updatePublishFormState({ tags: newTags });
this.setState({ tags: newTags });
} else {
notify({ message: __(`You already added the "${tag}" tag.`) });
notify({ message: __(`You already added the "${tag}" tag.`) }); // TODO: tokenize i18n
}
};
@ -868,7 +868,7 @@ class PublishPage extends React.PureComponent {
const { notify } = this.props;
if (this.state.thumbnailImagePickerOpen || this.state.uploadThumbnailStarted) {
if (this.state.uploadThumbnailStarted) {
notify({ message: 'A thumbnail is already being uploaded. Please wait for the upload to finish.' });
notify({ message: __('A thumbnail is already being uploaded. Please wait for the upload to finish.') });
}
return;
}
@ -913,7 +913,7 @@ class PublishPage extends React.PureComponent {
onPress={this.handleRecordVideoPressed}
>
<Icon name="video" size={48} color={Colors.White} />
<Text style={publishStyle.actionText}>Record</Text>
<Text style={publishStyle.actionText}>{__('Record')}</Text>
</TouchableOpacity>
<View style={publishStyle.subActions}>
<TouchableOpacity
@ -924,11 +924,11 @@ class PublishPage extends React.PureComponent {
onPress={this.handleTakePhotoPressed}
>
<Icon name="camera" size={48} color={Colors.White} />
<Text style={publishStyle.actionText}>Take a photo</Text>
<Text style={publishStyle.actionText}>{__('Take a photo')}</Text>
</TouchableOpacity>
<TouchableOpacity style={publishStyle.upload} onPress={this.handleUploadPressed}>
<Icon name="file-upload" size={48} color={Colors.White} />
<Text style={publishStyle.actionText}>Upload a file</Text>
<Text style={publishStyle.actionText}>{__('Upload a file')}</Text>
</TouchableOpacity>
</View>
</View>
@ -936,13 +936,13 @@ class PublishPage extends React.PureComponent {
{(loadingVideos || !allThumbnailsChecked) && (
<View style={publishStyle.loadingView}>
<ActivityIndicator size="small" color={Colors.NextLbryGreen} />
<Text style={publishStyle.loadingText}>Please wait while we load your videos...</Text>
<Text style={publishStyle.loadingText}>{__('Please wait while we load your videos...')}</Text>
</View>
)}
{!loadingVideos && (!videos || videos.length === 0) && (
<View style={publishStyle.relativeCentered}>
<Text style={publishStyle.noVideos}>
We could not find any videos on your device. Take a photo or record a video to get started.
{__('We could not find any videos on your device. Take a photo or record a video to get started.')}
</Text>
</View>
)}
@ -994,7 +994,7 @@ class PublishPage extends React.PureComponent {
{this.state.uploadThumbnailStarted && (
<View style={publishStyle.thumbnailUploadContainer}>
<ActivityIndicator size={'small'} color={Colors.NextLbryGreen} />
<Text style={publishStyle.thumbnailUploadText}>Uploading thumbnail...</Text>
<Text style={publishStyle.thumbnailUploadText}>{__('Uploading thumbnail...')}</Text>
</View>
)}
</TouchableOpacity>
@ -1003,11 +1003,11 @@ class PublishPage extends React.PureComponent {
<View style={publishStyle.card}>
<View style={publishStyle.textInputLayout}>
{(this.state.titleFocused || (this.state.title != null && this.state.title.trim().length > 0)) && (
<Text style={publishStyle.textInputTitle}>Title</Text>
<Text style={publishStyle.textInputTitle}>{__('Title')}</Text>
)}
<TextInput
editable={this.state.canPublish && !this.state.publishStarted}
placeholder={this.state.titleFocused ? '' : 'Title'}
placeholder={this.state.titleFocused ? '' : __('Title')}
style={publishStyle.inputText}
value={this.state.title}
numberOfLines={1}
@ -1021,12 +1021,12 @@ class PublishPage extends React.PureComponent {
<View style={publishStyle.textInputLayout}>
{(this.state.descriptionFocused ||
(this.state.description != null && this.state.description.trim().length > 0)) && (
<Text style={publishStyle.textInputTitle}>Description</Text>
<Text style={publishStyle.textInputTitle}>{__('Description')}</Text>
)}
<TextInput
editable={this.state.canPublish && !this.state.publishStarted}
multiline
placeholder={this.state.descriptionFocused ? '' : 'Description'}
placeholder={this.state.descriptionFocused ? '' : __('Description')}
style={publishStyle.inputText}
value={this.state.description}
underlineColorAndroid={Colors.NextLbryGreen}
@ -1038,7 +1038,7 @@ class PublishPage extends React.PureComponent {
</View>
<View style={publishStyle.card}>
<Text style={publishStyle.cardTitle}>Tags</Text>
<Text style={publishStyle.cardTitle}>{__('Tags')}</Text>
<View style={publishStyle.tagList}>
{this.state.tags &&
this.state.tags.map(tag => (
@ -1055,7 +1055,7 @@ class PublishPage extends React.PureComponent {
</View>
<View style={publishStyle.card}>
<Text style={publishStyle.cardTitle}>Channel</Text>
<Text style={publishStyle.cardTitle}>{__('Channel')}</Text>
<ChannelSelector
enabled={this.state.canPublish && !this.state.publishStarted}
@ -1066,14 +1066,16 @@ class PublishPage extends React.PureComponent {
<View style={publishStyle.card}>
<View style={publishStyle.titleRow}>
<Text style={publishStyle.cardTitle}>Price</Text>
<Text style={publishStyle.cardTitle}>{__('Price')}</Text>
<View style={publishStyle.switchTitleRow}>
<Switch value={this.state.priceSet} onValueChange={value => this.setState({ priceSet: value })} />
</View>
</View>
{!this.state.priceSet && (
<Text style={publishStyle.cardText}>Your content will be free. Press the toggle to set a price.</Text>
<Text style={publishStyle.cardText}>
{__('Your content will be free. Press the toggle to set a price.')}
</Text>
)}
{this.state.priceSet && (
@ -1103,11 +1105,13 @@ class PublishPage extends React.PureComponent {
</View>
<View style={publishStyle.card}>
<Text style={publishStyle.cardTitle}>Content address</Text>
<Text style={publishStyle.cardTitle}>{__('Content address')}</Text>
<Text style={publishStyle.helpText}>
The address where people can find your content (ex. lbry://myvideo).
{__('The address where people can find your content (ex. lbry://myvideo). ')}
{this.state.editMode &&
' You cannot change this address while editing your content. If you wish to use a new address, please republish the content.'}
__(
'You cannot change this address while editing your content. If you wish to use a new address, please republish the content.'
)}
</Text>
<TextInput
@ -1132,14 +1136,16 @@ class PublishPage extends React.PureComponent {
/>
<Text style={publishStyle.currency}>LBC</Text>
</View>
<Text style={publishStyle.helpText}>This LBC remains yours and the deposit can be undone at any time.</Text>
<Text style={publishStyle.helpText}>
{__('This LBC remains yours and the deposit can be undone at any time.')}
</Text>
</View>
{this.state.advancedMode && (
<View style={publishStyle.card}>
<Text style={publishStyle.cardTitle}>Additional Options</Text>
<Text style={publishStyle.cardTitle}>{__('Additional Options')}</Text>
<View>
<Text style={publishStyle.cardText}>Language</Text>
<Text style={publishStyle.cardText}>{__('Language')}</Text>
<Picker
enabled={this.state.canPublish && !this.state.publishStarted}
selectedValue={this.state.language}
@ -1154,7 +1160,7 @@ class PublishPage extends React.PureComponent {
</View>
<View>
<Text style={publishStyle.cardText}>License</Text>
<Text style={publishStyle.cardText}>{__('License')}</Text>
<Picker
enabled={this.state.canPublish && !this.state.publishStarted}
selectedValue={this.state.license}
@ -1162,18 +1168,22 @@ class PublishPage extends React.PureComponent {
itemStyle={publishStyle.pickerItem}
onValueChange={this.handleLicenseValueChange}
>
<Picker.Item label={'None'} value={LICENSES.NONE} key={LICENSES.NONE} />
<Picker.Item label={'Public Domain'} value={LICENSES.PUBLIC_DOMAIN} key={LICENSES.PUBLIC_DOMAIN} />
<Picker.Item label={__('None')} value={LICENSES.NONE} key={LICENSES.NONE} />
<Picker.Item
label={__('Public Domain')}
value={LICENSES.PUBLIC_DOMAIN}
key={LICENSES.PUBLIC_DOMAIN}
/>
{LICENSES.CC_LICENSES.map(({ value, url }) => (
<Picker.Item label={value} value={value} key={value} />
))}
<Picker.Item label={'Copyrighted...'} value={LICENSES.COPYRIGHT} key={LICENSES.COPYRIGHT} />
<Picker.Item label={'Other...'} value={LICENSES.OTHER} key={LICENSES.OTHER} />
<Picker.Item label={__('Copyrighted...')} value={LICENSES.COPYRIGHT} key={LICENSES.COPYRIGHT} />
<Picker.Item label={__('Other...')} value={LICENSES.OTHER} key={LICENSES.OTHER} />
</Picker>
{[LICENSES.COPYRIGHT, LICENSES.OTHER].includes(this.state.license) && (
<TextInput
editable={this.state.canPublish && !this.state.publishStarted}
placeholder={'License description'}
placeholder={__('License description')}
style={publishStyle.inputText}
underlineColorAndroid={Colors.NextLbryGreen}
numberOfLines={1}
@ -1187,7 +1197,7 @@ class PublishPage extends React.PureComponent {
<View style={publishStyle.toggleContainer}>
<Link
text={this.state.advancedMode ? 'Hide extra fields' : 'Show extra fields'}
text={this.state.advancedMode ? __('Hide extra fields') : __('Show extra fields')}
onPress={this.handleModePressed}
style={publishStyle.modeLink}
/>
@ -1201,7 +1211,7 @@ class PublishPage extends React.PureComponent {
)}
{!this.state.publishStarted && (
<Link style={publishStyle.cancelLink} text="Cancel" onPress={() => this.showSelector()} />
<Link style={publishStyle.cancelLink} text={__('Cancel')} onPress={() => this.showSelector()} />
)}
{!this.state.publishStarted && (
@ -1209,7 +1219,7 @@ class PublishPage extends React.PureComponent {
<Button
style={publishStyle.publishButton}
disabled={this.state.uploadThumbnailStarted}
text={this.state.editMode ? 'Save changes' : 'Publish'}
text={this.state.editMode ? __('Save changes') : __('Publish')}
onPress={this.handlePublishPressed}
/>
</View>
@ -1221,8 +1231,10 @@ class PublishPage extends React.PureComponent {
content = (
<ScrollView style={publishStyle.publishDetails}>
<View style={publishStyle.successContainer}>
<Text style={publishStyle.successTitle}>Success!</Text>
<Text style={publishStyle.successText}>Congratulations! Your content was successfully uploaded.</Text>
<Text style={publishStyle.successTitle}>{__('Success!')}</Text>
<Text style={publishStyle.successText}>
{__('Congratulations! Your content was successfully uploaded.')}
</Text>
<View style={publishStyle.successRow}>
<Link
style={publishStyle.successUrl}
@ -1232,19 +1244,24 @@ class PublishPage extends React.PureComponent {
<TouchableOpacity
onPress={() => {
Clipboard.setString(this.state.uri);
notify({ message: 'Copied.' });
notify({ message: __('Copied.') });
}}
>
<Icon name="clipboard" size={24} color={Colors.LbryGreen} />
</TouchableOpacity>
</View>
<Text style={publishStyle.successText}>
Your content will be live in a few minutes. In the mean time, feel free to publish more content or explore
the app.
{__(
'Your content will be live in a few minutes. In the mean time, feel free to publish more content or explore the app.'
)}
</Text>
</View>
<View style={publishStyle.actionButtons}>
<Button style={publishStyle.publishButton} text="Publish again" onPress={this.handlePublishAgainPressed} />
<Button
style={publishStyle.publishButton}
text={__('Publish again')}
onPress={this.handlePublishAgainPressed}
/>
</View>
</ScrollView>
);
@ -1282,7 +1299,7 @@ class PublishPage extends React.PureComponent {
}}
notAuthorizedView={
<View style={publishStyle.fullCentered}>
<Text style={publishStyle.cameraInfo}>Camera not authorized</Text>
<Text style={publishStyle.cameraInfo}>{__('Camera not authorized')}</Text>
</View>
}
/>

View file

@ -106,7 +106,8 @@ class RewardsPage extends React.PureComponent {
<View style={[rewardStyle.card, rewardStyle.verification]}>
<Text style={rewardStyle.title}>Manual Reward Verification</Text>
<Text style={rewardStyle.text}>
You need to be manually verified before you can start claiming rewards. Please request to be verified on the{' '}
__('You need to be manually verified before you can start claiming rewards.') Please request to be verified
on the{' '}
<Link
style={rewardStyle.greenLink}
href="https://discordapp.com/invite/Z3bERWA"
@ -129,13 +130,15 @@ class RewardsPage extends React.PureComponent {
return (
<View style={rewardStyle.busyContainer}>
<ActivityIndicator size="large" color={Colors.NextLbryGreen} />
<Text style={rewardStyle.infoText}>Fetching rewards...</Text>
<Text style={rewardStyle.infoText}>{__('Fetching rewards...')}</Text>
</View>
);
} else if (user === null) {
return (
<View style={rewardStyle.busyContainer}>
<Text style={rewardStyle.infoText}>This app is unable to earn rewards due to an authentication failure.</Text>
<Text style={rewardStyle.infoText}>
{__('This app is unable to earn rewards due to an authentication failure.')}
</Text>
</View>
);
}

View file

@ -143,7 +143,7 @@ class SearchPage extends React.PureComponent {
{showTagResult && (
<TouchableOpacity style={searchStyle.tagResultItem} onPress={() => this.handleTagResultPressed(query)}>
<Text style={searchStyle.tagResultTitle}>#{query.toLowerCase()}</Text>
<Text style={searchStyle.tagResultDescription}>Explore content for this tag</Text>
<Text style={searchStyle.tagResultDescription}>{__('Explore content for this tag')}</Text>
</TouchableOpacity>
)}
</View>

View file

@ -78,14 +78,17 @@ class SettingsPage extends React.PureComponent {
return (
<View style={settingsStyle.container}>
<PageHeader title={'Settings'} onBackPressed={() => navigateBack(navigation, drawerStack, popDrawerStack)} />
<PageHeader
title={__('Settings')}
onBackPressed={() => navigateBack(navigation, drawerStack, popDrawerStack)}
/>
<ScrollView style={settingsStyle.scrollContainer}>
<Text style={settingsStyle.sectionTitle}>Content</Text>
<Text style={settingsStyle.sectionTitle}>{__('Content')}</Text>
<View style={settingsStyle.row}>
<View style={settingsStyle.switchText}>
<Text style={settingsStyle.label}>Enable background media playback</Text>
<Text style={settingsStyle.label}>{__('Enable background media playback')}</Text>
<Text style={settingsStyle.description}>
Enable this option to play audio or video in the background when the app is suspended.
{__('Enable this option to play audio or video in the background when the app is suspended.')}
</Text>
</View>
<View style={settingsStyle.switchContainer}>
@ -98,7 +101,7 @@ class SettingsPage extends React.PureComponent {
<View style={settingsStyle.row}>
<View style={settingsStyle.switchText}>
<Text style={settingsStyle.label}>Show mature content</Text>
<Text style={settingsStyle.label}>{__('Show mature content')}</Text>
</View>
<View style={settingsStyle.switchContainer}>
<Switch value={showNsfw} onValueChange={value => setClientSetting(SETTINGS.SHOW_NSFW, value)} />
@ -169,10 +172,10 @@ class SettingsPage extends React.PureComponent {
)}
<View style={settingsStyle.sectionDivider} />
<Text style={settingsStyle.sectionTitle}>Search</Text>
<Text style={settingsStyle.sectionTitle}>{__('Search')}</Text>
<View style={settingsStyle.row}>
<View style={settingsStyle.switchText}>
<Text style={settingsStyle.label}>Show URL suggestions</Text>
<Text style={settingsStyle.label}>{__('Show URL suggestions')}</Text>
</View>
<View style={settingsStyle.switchContainer}>
<Switch
@ -183,13 +186,16 @@ class SettingsPage extends React.PureComponent {
</View>
<View style={settingsStyle.sectionDivider} />
<Text style={settingsStyle.sectionTitle}>Other</Text>
<Text style={settingsStyle.sectionTitle}>{__('Other')}</Text>
<View style={settingsStyle.row}>
<View style={settingsStyle.switchText}>
<Text style={settingsStyle.label}>Keep the daemon background service running after closing the app</Text>
<Text style={settingsStyle.label}>
{__('Keep the SDK background service running after closing the app')}
</Text>
<Text style={settingsStyle.description}>
Enable this option for quicker app launch and to keep the synchronisation with the blockchain up to
date.
{__(
'Enable this option for quicker app launch and to keep the synchronisation with the blockchain up to date.'
)}
</Text>
</View>
<View style={settingsStyle.switchContainer}>

View file

@ -16,8 +16,8 @@ import splashStyle from 'styles/splash';
const BLOCK_HEIGHT_INTERVAL = 1000 * 60 * 2.5; // every 2.5 minutes
const testingNetwork = 'Testing network';
const waitingForResolution = 'Waiting for name resolution';
const testingNetwork = __('Testing network');
const waitingForResolution = __('Waiting for name resolution');
class SplashScreen extends React.PureComponent {
static navigationOptions = {
@ -27,8 +27,8 @@ class SplashScreen extends React.PureComponent {
state = {
accountUnlockFailed: false,
daemonReady: false,
details: 'Starting up',
message: 'Connecting',
details: __('Starting up'),
message: __('Connecting'),
isRunning: false,
isLagging: false,
launchUrl: null,
@ -69,13 +69,13 @@ class SplashScreen extends React.PureComponent {
try {
verifyUserEmail(verification.token, verification.recaptcha);
} catch (error) {
const message = 'Invalid Verification Token';
const message = __('Invalid Verification Token');
verifyUserEmailFailure(message);
notify({ message });
}
} else {
notify({
message: 'Invalid Verification URI',
message: __('Invalid Verification URI'),
});
}
} else {
@ -195,8 +195,8 @@ class SplashScreen extends React.PureComponent {
NativeModules.UtilityModule.getSecureValue(Constants.KEY_WALLET_PASSWORD).then(password => {
if ((secureWalletStatus.is_encrypted && !secureWalletStatus.is_locked) || secureWalletStatus.is_locked) {
this.setState({
message: 'Unlocking account',
details: 'Decrypting wallet',
message: __('Unlocking account'),
details: __('Decrypting wallet'),
});
// unlock the wallet and then finish the splash screen
@ -239,20 +239,20 @@ class SplashScreen extends React.PureComponent {
if (blockchainHeaders && blockchainHeaders.downloading_headers) {
const downloadProgress = blockchainHeaders.download_progress ? blockchainHeaders.download_progress : 0;
this.setState({
message: 'Blockchain Sync',
details: `Catching up with the blockchain (${downloadProgress}%)`,
message: __('Blockchain Sync'),
details: `Catching up with the blockchain (${downloadProgress}%)`, // TODO: i18n tokenization
});
} else if (walletStatus && walletStatus.blocks_behind > 0) {
const behind = walletStatus.blocks_behind;
const behindText = behind + ' block' + (behind === 1 ? '' : 's') + ' behind';
const behindText = behind + ' block' + (behind === 1 ? '' : 's') + ' behind'; // TODO: i18n tokenization
this.setState({
message: 'Blockchain Sync',
message: __('Blockchain Sync'),
details: behindText,
});
} else {
this.setState({
message: 'Network Loading',
details: 'Initializing LBRY service',
message: __('Network Loading'),
details: __('Initializing LBRY service'),
});
}
@ -292,9 +292,10 @@ class SplashScreen extends React.PureComponent {
.catch(e => {
this.setState({
isLagging: true,
message: 'Connection Failure',
details:
'We could not establish a connection to the daemon. Your data connection may be preventing LBRY from connecting. Contact hello@lbry.com if you think this is a software bug.',
message: __('Connection Failure'),
details: __(
'We could not establish a connection to the SDK. Your data connection may be preventing LBRY from connecting. Contact hello@lbry.com if you think this is a software bug.'
),
});
});
});
@ -328,19 +329,22 @@ class SplashScreen extends React.PureComponent {
if (accountUnlockFailed) {
return (
<View style={splashStyle.container}>
<Text style={splashStyle.errorTitle}>Oops! Something went wrong.</Text>
<Text style={splashStyle.errorTitle}>{__('Oops! Something went wrong.')}</Text>
<Text style={splashStyle.paragraph}>
Your wallet failed to unlock, which means you may not be able to play any videos or access your funds.
{__(
'Your wallet failed to unlock, which means you may not be able to play any videos or access your funds.'
)}
</Text>
<Text style={splashStyle.paragraph}>
You can try to fix this by tapping Stop on the LBRY service notification and starting the app again. If the
problem continues, you may have to reinstall the app and restore your account.
{__(
'You can try to fix this by tapping Stop on the LBRY service notification and starting the app again. If the problem continues, you may have to reinstall the app and restore your account.'
)}
</Text>
<Button
style={splashStyle.continueButton}
theme={'light'}
text={'Continue anyway'}
text={__('Continue anyway')}
onPress={this.handleContinueAnywayPressed}
/>
</View>

View file

@ -149,7 +149,7 @@ class SubscriptionsPage extends React.PureComponent {
<View style={subscriptionsStyle.container}>
<UriBar navigation={navigation} belowOverlay={this.state.showSortPicker} />
<View style={subscriptionsStyle.titleRow}>
<Text style={subscriptionsStyle.pageTitle}>Channels you follow</Text>
<Text style={subscriptionsStyle.pageTitle}>{__('Channels you follow')}</Text>
</View>
{!this.state.showingSuggestedSubs && hasSubscriptions && (
<View style={subscriptionsStyle.pickerRow}>
@ -175,7 +175,7 @@ class SubscriptionsPage extends React.PureComponent {
<Link
style={subscriptionsStyle.suggestedLink}
text={'Suggested'}
text={__('Suggested')}
onPress={() => this.setState({ showModalSuggestedSubs: true })}
/>
</View>
@ -207,7 +207,9 @@ class SubscriptionsPage extends React.PureComponent {
<View style={subscriptionsStyle.suggestedSubsContainer}>
{!hasSubscriptions && (
<View style={subscriptionsStyle.infoArea}>
<Text style={subscriptionsStyle.infoText}>You are not subscribed to any channels at the moment.</Text>
<Text style={subscriptionsStyle.infoText}>
{__('You are not subscribed to any channels at the moment.')}
</Text>
</View>
)}
@ -218,7 +220,7 @@ class SubscriptionsPage extends React.PureComponent {
</Text>
<Button
style={subscriptionsStyle.button}
text={'View my subscriptions'}
text={__('View my subscriptions')}
onPress={() => this.setState({ showingSuggestedSubs: false })}
/>
</View>

View file

@ -118,7 +118,7 @@ class TagPage extends React.PureComponent {
<Link
style={discoverStyle.customizeLink}
text={this.isFollowingTag(tag) ? 'Unfollow' : 'Follow'}
text={this.isFollowingTag(tag) ? __('Unfollow') : __('Follow')}
onPress={this.handleFollowTagToggle}
/>
</View>

View file

@ -51,10 +51,12 @@ class TransactionHistoryPage extends React.PureComponent {
{fetchingTransactions && (
<View style={walletStyle.loadingContainer}>
<ActivityIndicator size={'small'} color={Colors.NextLbryGreen} />
<Text style={walletStyle.loadingText}>Loading transactions...</Text>
<Text style={walletStyle.loadingText}>{__('Loading transactions...')}</Text>
</View>
)}
{!fetchingTransactions && transactions.length === 0 && <EmptyStateView message={'No transactions to list.'} />}
{!fetchingTransactions && transactions.length === 0 && (
<EmptyStateView message={__('No transactions to list.')} />
)}
<ScrollView style={walletStyle.transactionHistoryScroll}>
<View style={walletStyle.historyList}>
{!fetchingTransactions && transactions && transactions.length > 0 && (

View file

@ -17,8 +17,8 @@ import UriBar from 'component/uriBar';
import discoverStyle from 'styles/discover';
const TRENDING_FOR_ITEMS = [
{ icon: 'globe-americas', name: 'everyone', label: 'Everyone' },
{ icon: 'hashtag', name: 'tags', label: 'Tags you follow' },
{ icon: 'globe-americas', name: 'everyone', label: __('Everyone') },
{ icon: 'hashtag', name: 'tags', label: __('Tags you follow') },
];
class TrendingPage extends React.PureComponent {
@ -92,7 +92,7 @@ class TrendingPage extends React.PureComponent {
return (
<View style={discoverStyle.listHeader}>
<View style={discoverStyle.titleRow}>
<Text style={discoverStyle.pageTitle}>All content</Text>
<Text style={discoverStyle.pageTitle}>{__('All Content')}</Text>
</View>
<View style={discoverStyle.pickerRow}>
<View style={discoverStyle.leftPickerRow}>
@ -126,7 +126,7 @@ class TrendingPage extends React.PureComponent {
{TRENDING_FOR_ITEMS[1].name === currentTrendingForItem.name && (
<Link
style={discoverStyle.customizeLink}
text={'Customize'}
text={__('Customize')}
onPress={() => this.setState({ showModalTagSelector: true })}
/>
)}
@ -170,7 +170,7 @@ class TrendingPage extends React.PureComponent {
)}
{showTrendingForPicker && (
<ModalPicker
title={'Filter for'}
title={__('Filter for')}
onOverlayPress={() => this.setState({ showTrendingForPicker: false })}
onItemSelected={this.handleTrendingForItemSelected}
selectedItem={currentTrendingForItem}

View file

@ -49,7 +49,7 @@ class EmailVerifyPage extends React.PureComponent {
if (setEmailVerificationPhase) {
setEmailVerificationPhase(true);
}
// notify({ message: 'Please follow the instructions in the email sent to your address to continue.' });
// notify({ message: __('Please follow the instructions in the email sent to your address to continue.') });
AsyncStorage.setItem(Constants.KEY_EMAIL_VERIFY_PENDING, 'true');
}
}
@ -65,7 +65,7 @@ class EmailVerifyPage extends React.PureComponent {
const { email } = this.state;
if (!email || email.trim().length === 0 || email.indexOf('@') === -1) {
return notify({
message: 'Please provide a valid email address to continue.',
message: __('Please provide a valid email address to continue.'),
});
}
@ -89,7 +89,7 @@ class EmailVerifyPage extends React.PureComponent {
// resend verification email if there was one previously set (and it wasn't changed)
resendVerificationEmail(this.state.email);
AsyncStorage.setItem(Constants.KEY_EMAIL_VERIFY_PENDING, 'true');
notify({ message: 'Please follow the instructions in the email sent to your address to continue.' });
notify({ message: __('Please follow the instructions in the email sent to your address to continue.') });
};
onEditPressed = () => {
@ -110,7 +110,7 @@ class EmailVerifyPage extends React.PureComponent {
return (
<View style={firstRunStyle.container}>
<Text style={rewardStyle.verificationTitle}>
{Constants.PHASE_COLLECTION === this.state.phase ? 'Email' : 'Verify Email'}
{Constants.PHASE_COLLECTION === this.state.phase ? __('Email') : __('Verify Email')}
</Text>
{Constants.PHASE_COLLECTION === this.state.phase && (
<View>
@ -138,7 +138,7 @@ class EmailVerifyPage extends React.PureComponent {
<Button
style={rewardStyle.verificationButton}
theme={'light'}
text={'Send verification email'}
text={__('Send verification email')}
onPress={this.onSendVerificationPressed}
/>
)}
@ -162,10 +162,10 @@ class EmailVerifyPage extends React.PureComponent {
<Button
style={rewardStyle.verificationButton}
theme={'light'}
text={'Resend'}
text={__('Resend')}
onPress={this.onResendPressed}
/>
<Link style={rewardStyle.verificationLink} text={'Edit'} onPress={this.onEditPressed} />
<Link style={rewardStyle.verificationLink} text={__('Edit')} onPress={this.onEditPressed} />
</View>
</View>
)}

View file

@ -5,7 +5,7 @@ import AsyncStorage from '@react-native-community/async-storage';
import Button from 'component/button';
import Link from 'component/link';
import Colors from 'styles/colors';
import Constants from 'constants';
import Constants from 'constants'; // eslint-disable-line node/no-deprecated-api
import firstRunStyle from 'styles/firstRun';
import rewardStyle from 'styles/reward';
@ -22,8 +22,9 @@ class ManualVerifyPage extends React.PureComponent {
<View style={firstRunStyle.container}>
<Text style={rewardStyle.verificationTitle}>Manual Reward Verification</Text>
<Text style={firstRunStyle.spacedParagraph}>
This account must undergo review before you can participate in the rewards program. This can take anywhere
from several minutes to several days.
{__(
'This account must undergo review before you can participate in the rewards program. This can take anywhere from several minutes to several days.'
)}
</Text>
<Text style={firstRunStyle.spacedParagraph}>
If you continue to see this message, please request to be verified on the{' '}

View file

@ -13,7 +13,7 @@ import {
import AsyncStorage from '@react-native-community/async-storage';
import Button from 'component/button';
import Colors from 'styles/colors';
import Constants from 'constants';
import Constants from 'constants'; // eslint-disable-line node/no-deprecated-api
import CountryPicker from 'react-native-country-picker-modal';
import Icon from 'react-native-vector-icons/FontAwesome5';
import Link from 'component/link';
@ -149,10 +149,10 @@ class PhoneVerifyPage extends React.PureComponent {
</Text>
<View style={rewardStyle.phoneVerificationContainer}>
{this.state.phase == Constants.PHASE_COLLECTION && (
{this.state.phase === Constants.PHASE_COLLECTION && (
<View>
<Text style={[rewardStyle.bottomMarginMedium, firstRunStyle.paragraph]}>
Please provide a phone number to prevent fraud.
{__('Please provide a phone number to prevent fraud.')}
</Text>
<PhoneInput
ref={ref => {
@ -237,9 +237,9 @@ class PhoneVerifyPage extends React.PureComponent {
this.picker = picker;
}}
cca2={this.state.cca2}
filterable={true}
filterable
onChange={value => this.selectCountry(value)}
showCallingCode={true}
showCallingCode
translation="eng"
>
<View />

View file

@ -92,7 +92,7 @@ class SyncVerifyPage extends React.PureComponent {
navigation.goBack();
} else {
if (notifyUnlockFailed) {
notify({ message: 'The wallet could not be unlocked at this time. Please restart the app.' });
notify({ message: __('The wallet could not be unlocked at this time. Please restart the app.') });
}
}
});
@ -117,11 +117,11 @@ class SyncVerifyPage extends React.PureComponent {
let paragraph;
if (!hasSyncedWallet) {
paragraph = (
<Text style={firstRunStyle.paragraph}>Please enter a password to secure your account and wallet.</Text>
<Text style={firstRunStyle.paragraph}>{__('Please enter a password to secure your account and wallet.')}</Text>
);
} else {
paragraph = (
<Text style={firstRunStyle.paragraph}>Please enter the password you used to secure your wallet.</Text>
<Text style={firstRunStyle.paragraph}>{__('Please enter the password you used to secure your wallet.')}</Text>
);
}
@ -130,13 +130,13 @@ class SyncVerifyPage extends React.PureComponent {
content = (
<View style={firstRunStyle.centered}>
<ActivityIndicator size="large" color={Colors.White} style={firstRunStyle.waiting} />
<Text style={firstRunStyle.paragraph}>Retrieving your account information...</Text>
<Text style={firstRunStyle.paragraph}>{__('Retrieving your account information...')}</Text>
</View>
);
} else {
content = (
<View>
<Text style={rewardStyle.verificationTitle}>Wallet Sync</Text>
<Text style={rewardStyle.verificationTitle}>{__('Wallet Sync')}</Text>
{paragraph}
<View style={firstRunStyle.passwordInputContainer}>
<TextInput
@ -170,8 +170,8 @@ class SyncVerifyPage extends React.PureComponent {
<View style={firstRunStyle.passwordWarning}>
<Text style={firstRunStyle.passwordWarningText}>
{hasSyncedWallet
? 'If you did not provide a password, please press Use LBRY to continue.'
: 'You can proceed without a password, but this is not recommended.'}
? __('If you did not provide a password, please press Use LBRY to continue.')
: __('You can proceed without a password, but this is not recommended.')}
</Text>
</View>
)}
@ -186,7 +186,7 @@ class SyncVerifyPage extends React.PureComponent {
</View>
)}
<Text style={firstRunStyle.infoParagraph}>
Note: for wallet security purposes, LBRY is unable to reset your password.
{__('Note: for wallet security purposes, LBRY is unable to reset your password.')}
</Text>
<View style={rewardStyle.buttonContainer}>
@ -194,7 +194,7 @@ class SyncVerifyPage extends React.PureComponent {
<Button
style={rewardStyle.verificationButton}
theme={'light'}
text={signInFlow ? 'Use LBRY' : 'Enable sync'}
text={signInFlow ? __('Use LBRY') : __('Enable sync')}
onPress={this.onEnableSyncPressed}
/>
)}