lots of stuff translated
This commit is contained in:
parent
dbb118c8ee
commit
01cb3f583e
13 changed files with 140 additions and 68 deletions
|
@ -233,5 +233,77 @@
|
||||||
"Loading transactions": "Loading transactions",
|
"Loading transactions": "Loading transactions",
|
||||||
"Amount": "Amount",
|
"Amount": "Amount",
|
||||||
"Time": "Time",
|
"Time": "Time",
|
||||||
"Transaction": "Transaction"
|
"Transaction": "Transaction",
|
||||||
|
"You earned %s for registering as a new developer.": "You earned %s for registering as a new developer.",
|
||||||
|
"You earned %s LBC new user reward.": "You earned %s LBC new user reward.",
|
||||||
|
"You earned %s LBC for verifying your email address.": "You earned %s LBC for verifying your email address.",
|
||||||
|
"You earned %s LBC for creating a publisher identity.": "You earned %s LBC for creating a publisher identity.",
|
||||||
|
"You earned %s LBC for streaming your first video.": "You earned %s LBC for streaming your first video.",
|
||||||
|
"You earned %s LBC for downloading some of the things.": "You earned %s LBC for downloading some of the things.",
|
||||||
|
"You earned %s LBC for making your first publication.": "You earned %s LBC for making your first publication.",
|
||||||
|
"Your First Nickel": "Your First Nickel",
|
||||||
|
"First Publish": "First Publish",
|
||||||
|
"We're Going Streaming": "We're Going Streaming",
|
||||||
|
"Channel Surfing": "Channel Surfing",
|
||||||
|
"Many Views": "Many Views",
|
||||||
|
"Hot Right Now": "Hot Right Now",
|
||||||
|
"A welcome bonus for being at the vanguard of content freedom.": "A welcome bonus for being at the vanguard of content freedom.",
|
||||||
|
"The first view is on us.": "The first view is on us.",
|
||||||
|
"Up the quad, and to the gymanasium. Press play. Everybody's doing it.": "Up the quad, and to the gymanasium. Press play. Everybody's doing it.",
|
||||||
|
"Claim your channel! Create an identity used to securely publish content.": "Claim your channel! Create an identity used to securely publish content.",
|
||||||
|
"Watch a bunch of stuff... who knows how much?": "Watch a bunch of stuff... who knows how much?",
|
||||||
|
"Watch the latest featured content.": "Watch the latest featured content.",
|
||||||
|
"Rewards are not enabled.": "Rewards are not enabled.",
|
||||||
|
"Failed to load rewards.": "Failed to load rewards.",
|
||||||
|
"Reward claimed.": "Reward claimed.",
|
||||||
|
"Show All": "Show All",
|
||||||
|
"Please create a channel identity first.": "Please create a channel identity first.",
|
||||||
|
"Please publish something and wait for confirmation by the network to claim this reward.": "Please publish something and wait for confirmation by the network to claim this reward.",
|
||||||
|
"Please publish something to claim this reward.": "Please publish something to claim this reward.",
|
||||||
|
"Could not connect to Lighthouse server. Last server attempted: %s": "Could not connect to Lighthouse server. Last server attempted: %s",
|
||||||
|
"LBRY URIs must include a protocol prefix (lbry://).": "LBRY URIs must include a protocol prefix (lbry://).",
|
||||||
|
"URI does not include name.": "URI does not include name.",
|
||||||
|
"No channel name after @.": "No channel name after @.",
|
||||||
|
"Channel names must be at least %s characters.": "Channel names must be at least %s characters.",
|
||||||
|
"Invalid character %s in name: %s.": "Invalid character %s in name: %s.",
|
||||||
|
"No modifier provided after separator %s.": "No modifier provided after separator %s.",
|
||||||
|
"Invalid claim ID %s.": "Invalid claim ID %s.",
|
||||||
|
"Claim sequence must be a number.": "Claim sequence must be a number.",
|
||||||
|
"Bid position must be a number.": "Bid position must be a number.",
|
||||||
|
"Only channel URIs may have a path.": "Only channel URIs may have a path.",
|
||||||
|
"Invalid character %s in path: %s": "Invalid character %s in path: %s",
|
||||||
|
"No path provided after /": "No path provided after /",
|
||||||
|
"Received a channel content URI, but name and channelName do not match. \"name\" represents the value in the name position of the URI (lbry://name...), which for channel content will be the channel name. In most cases, to construct a channel URI you should just pass channelName and contentName.": "Received a channel content URI, but name and channelName do not match. \"name\" represents the value in the name position of the URI (lbry://name...), which for channel content will be the channel name. In most cases, to construct a channel URI you should just pass channelName and contentName.",
|
||||||
|
"Path and contentName do not match. Only one is required; most likely you wanted contentName.": "Path and contentName do not match. Only one is required; most likely you wanted contentName.",
|
||||||
|
"Internal API disabled": "Internal API disabled",
|
||||||
|
"LBRY internal API is disabled": "LBRY internal API is disabled",
|
||||||
|
"Something went wrong making an internal API call.": "Something went wrong making an internal API call.",
|
||||||
|
"XMLHttpRequest connection timed out": "XMLHttpRequest connection timed out",
|
||||||
|
"Invalid method": "Invalid method",
|
||||||
|
"Received invalid authentication response.": "Received invalid authentication response.",
|
||||||
|
"Unable to connect to LBRY": "Unable to connect to LBRY",
|
||||||
|
"Resolve has hacked cache on top of it that requires a URI": "Resolve has hacked cache on top of it that requires a URI",
|
||||||
|
"Connection to API server failed": "Connection to API server failed",
|
||||||
|
"Please select a file to upgrade from": "Please select a file to upgrade from",
|
||||||
|
"Update available": "Update available",
|
||||||
|
"Upgrade": "Upgrade",
|
||||||
|
"Skip": "Skip",
|
||||||
|
"Your version of LBRY is out of date and may be unreliable or insecure.": "Your version of LBRY is out of date and may be unreliable or insecure.",
|
||||||
|
"Sorry, your download timed out :(": "Sorry, your download timed out :(",
|
||||||
|
"Requesting stream... it may sit here for like 15-20 seconds in a really awkward way... we're working on it": "Requesting stream... it may sit here for like 15-20 seconds in a really awkward way... we're working on it",
|
||||||
|
"Downloading stream... not long left now!": "Downloading stream... not long left now!",
|
||||||
|
"this is the world's worst loading screen and we shipped our software with it anyway...": "this is the world's worst loading screen and we shipped our software with it anyway...",
|
||||||
|
"Wallet Address": "Wallet Address",
|
||||||
|
"Get New Address": "Get New Address",
|
||||||
|
"Other LBRY users may send credits to you by entering this address on the \"Send\" page.": "Other LBRY users may send credits to you by entering this address on the \"Send\" page.",
|
||||||
|
"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",
|
||||||
|
"Insufficient balance": "Insufficient balance",
|
||||||
|
"Insufficient balance: after this transaction you would have less than 1 LBC in your wallet.": "Insufficient balance: after this transaction you would have less than 1 LBC in your wallet.",
|
||||||
|
"Transaction successful": "Transaction successful",
|
||||||
|
"Your transaction was successfully placed in the queue.": "Your transaction was successfully placed in the queue.",
|
||||||
|
"Transaction failed": "Transaction failed",
|
||||||
|
"Something went wrong": "Something went wrong",
|
||||||
|
"Find movies, music, games, and more": "Find movies, music, games, and more"
|
||||||
}
|
}
|
|
@ -17,13 +17,13 @@ class UpgradeModal extends React.Component {
|
||||||
return (
|
return (
|
||||||
<Modal
|
<Modal
|
||||||
isOpen={true}
|
isOpen={true}
|
||||||
contentLabel="Update available"
|
contentLabel={__("Update available")}
|
||||||
type="confirm"
|
type="confirm"
|
||||||
confirmButtonLabel="Upgrade"
|
confirmButtonLabel={__("Upgrade")}
|
||||||
abortButtonLabel="Skip"
|
abortButtonLabel={__("Skip")}
|
||||||
onConfirmed={downloadUpgrade}
|
onConfirmed={downloadUpgrade}
|
||||||
onAborted={skipUpgrade}>
|
onAborted={skipUpgrade}>
|
||||||
Your version of LBRY is out of date and may be unreliable or insecure.
|
{__("Your version of LBRY is out of date and may be unreliable or insecure.")}
|
||||||
</Modal>
|
</Modal>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
@ -51,20 +51,20 @@ class VideoPlayButton extends React.Component {
|
||||||
icon="icon-play"
|
icon="icon-play"
|
||||||
onClick={this.onWatchClick.bind(this)} />
|
onClick={this.onWatchClick.bind(this)} />
|
||||||
{modal}
|
{modal}
|
||||||
<Modal contentLabel="Not enough credits" isOpen={modal == 'notEnoughCredits'} onConfirmed={() => { this.closeModal() }}>
|
<Modal contentLabel={__("Not enough credits")} isOpen={modal == 'notEnoughCredits'} onConfirmed={() => { this.closeModal() }}>
|
||||||
You don't have enough LBRY credits to pay for this stream.
|
{__("You don't have enough LBRY credits to pay for this stream.")}
|
||||||
</Modal>
|
</Modal>
|
||||||
<Modal
|
<Modal
|
||||||
type="confirm"
|
type="confirm"
|
||||||
isOpen={modal == 'affirmPurchase'}
|
isOpen={modal == 'affirmPurchase'}
|
||||||
contentLabel="Confirm Purchase"
|
contentLabel={__("Confirm Purchase")}
|
||||||
onConfirmed={this.onPurchaseConfirmed.bind(this)}
|
onConfirmed={this.onPurchaseConfirmed.bind(this)}
|
||||||
onAborted={closeModal}>
|
onAborted={closeModal}>
|
||||||
This will purchase <strong>{title}</strong> for <strong><FilePrice uri={uri} look="plain" /></strong> credits.
|
{__("This will purchase")} <strong>{title}</strong> {__("for")} <strong><FilePrice uri={uri} look="plain" /></strong> {__("credits")}.
|
||||||
</Modal>
|
</Modal>
|
||||||
<Modal
|
<Modal
|
||||||
isOpen={modal == 'timedOut'} onConfirmed={() => { this.closeModal() }} contentLabel="Timed Out">
|
isOpen={modal == 'timedOut'} onConfirmed={() => { this.closeModal() }} contentLabel="Timed Out">
|
||||||
Sorry, your download timed out :(
|
{__("Sorry, your download timed out :(")}
|
||||||
</Modal>
|
</Modal>
|
||||||
</div>);
|
</div>);
|
||||||
}
|
}
|
||||||
|
@ -100,16 +100,16 @@ class Video extends React.Component {
|
||||||
let loadStatusMessage = ''
|
let loadStatusMessage = ''
|
||||||
|
|
||||||
if (isLoading) {
|
if (isLoading) {
|
||||||
loadStatusMessage = "Requesting stream... it may sit here for like 15-20 seconds in a really awkward way... we're working on it"
|
loadStatusMessage = __("Requesting stream... it may sit here for like 15-20 seconds in a really awkward way... we're working on it")
|
||||||
} else if (isDownloading) {
|
} else if (isDownloading) {
|
||||||
loadStatusMessage = "Downloading stream... not long left now!"
|
loadStatusMessage = __("Downloading stream... not long left now!")
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className={"video " + this.props.className + (isPlaying ? " video--active" : " video--hidden")}>{
|
<div className={"video " + this.props.className + (isPlaying ? " video--active" : " video--hidden")}>{
|
||||||
isPlaying || isLoading ?
|
isPlaying || isLoading ?
|
||||||
(!isReadyToPlay ?
|
(!isReadyToPlay ?
|
||||||
<span>this is the world's worst loading screen and we shipped our software with it anyway... <br /><br />{loadStatusMessage}</span> :
|
<span>{__("this is the world's worst loading screen and we shipped our software with it anyway...")} <br /><br />{loadStatusMessage}</span> :
|
||||||
<VideoPlayer poster={metadata.thumbnail} autoplay={isPlaying} downloadPath={fileInfo.download_path} />) :
|
<VideoPlayer poster={metadata.thumbnail} autoplay={isPlaying} downloadPath={fileInfo.download_path} />) :
|
||||||
<div className="video__cover" style={{backgroundImage: 'url("' + metadata.thumbnail + '")'}}>
|
<div className="video__cover" style={{backgroundImage: 'url("' + metadata.thumbnail + '")'}}>
|
||||||
<VideoPlayButton startPlaying={this.startPlaying.bind(this)} {...this.props} />
|
<VideoPlayButton startPlaying={this.startPlaying.bind(this)} {...this.props} />
|
||||||
|
|
|
@ -19,18 +19,18 @@ class WalletAddress extends React.Component {
|
||||||
return (
|
return (
|
||||||
<section className="card">
|
<section className="card">
|
||||||
<div className="card__title-primary">
|
<div className="card__title-primary">
|
||||||
<h3>Wallet Address</h3>
|
<h3>{__("Wallet Address")}</h3>
|
||||||
</div>
|
</div>
|
||||||
<div className="card__content">
|
<div className="card__content">
|
||||||
<Address address={receiveAddress} />
|
<Address address={receiveAddress} />
|
||||||
</div>
|
</div>
|
||||||
<div className="card__actions">
|
<div className="card__actions">
|
||||||
<Link label="Get New Address" button="primary" icon='icon-refresh' onClick={getNewAddress} disabled={gettingNewAddress} />
|
<Link label={__("Get New Address")} button="primary" icon='icon-refresh' onClick={getNewAddress} disabled={gettingNewAddress} />
|
||||||
</div>
|
</div>
|
||||||
<div className="card__content">
|
<div className="card__content">
|
||||||
<div className="help">
|
<div className="help">
|
||||||
<p>Other LBRY users may send credits to you by entering this address on the "Send" page.</p>
|
<p>{__("Other LBRY users may send credits to you by entering this address on the \"Send\" page.")}</p>
|
||||||
<p>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.</p>
|
<p>{__("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.")}</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
|
@ -20,27 +20,27 @@ const WalletSend = (props) => {
|
||||||
<section className="card">
|
<section className="card">
|
||||||
<form onSubmit={sendToAddress}>
|
<form onSubmit={sendToAddress}>
|
||||||
<div className="card__title-primary">
|
<div className="card__title-primary">
|
||||||
<h3>Send Credits</h3>
|
<h3>{__("Send Credits")}</h3>
|
||||||
</div>
|
</div>
|
||||||
<div className="card__content">
|
<div className="card__content">
|
||||||
<FormRow label="Amount" postfix="LBC" step="0.01" type="number" placeholder="1.23" size="10" onChange={setAmount} value={amount} />
|
<FormRow label={__("Amount")} postfix="LBC" step="0.01" type="number" placeholder="1.23" size="10" onChange={setAmount} value={amount} />
|
||||||
</div>
|
</div>
|
||||||
<div className="card__content">
|
<div className="card__content">
|
||||||
<FormRow label="Recipient Address" placeholder="bbFxRyXXXXXXXXXXXZD8nE7XTLUxYnddTs" type="text" size="60" onChange={setAddress} value={address} />
|
<FormRow label={__("Recipient Address")} placeholder="bbFxRyXXXXXXXXXXXZD8nE7XTLUxYnddTs" type="text" size="60" onChange={setAddress} value={address} />
|
||||||
</div>
|
</div>
|
||||||
<div className="card__actions card__actions--form-submit">
|
<div className="card__actions card__actions--form-submit">
|
||||||
<Link button="primary" label="Send" onClick={sendToAddress} disabled={!(parseFloat(amount) > 0.0) || !address} />
|
<Link button="primary" label={_("Send")} onClick={sendToAddress} disabled={!(parseFloat(amount) > 0.0) || !address} />
|
||||||
<input type='submit' className='hidden' />
|
<input type='submit' className='hidden' />
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
{modal == 'insufficientBalance' && <Modal isOpen={true} contentLabel="Insufficient balance" onConfirmed={closeModal}>
|
{modal == 'insufficientBalance' && <Modal isOpen={true} contentLabel={__("Insufficient balance")} onConfirmed={closeModal}>
|
||||||
Insufficient balance: after this transaction you would have less than 1 LBC in your wallet.
|
{__("Insufficient balance: after this transaction you would have less than 1 LBC in your wallet.")}
|
||||||
</Modal>}
|
</Modal>}
|
||||||
{modal == 'transactionSuccessful' && <Modal isOpen={true} contentLabel="Transaction successful" onConfirmed={closeModal}>
|
{modal == 'transactionSuccessful' && <Modal isOpen={true} contentLabel={__("Transaction successful")} onConfirmed={closeModal}>
|
||||||
Your transaction was successfully placed in the queue.
|
{__("Your transaction was successfully placed in the queue.")}
|
||||||
</Modal>}
|
</Modal>}
|
||||||
{modal == 'transactionFailed' && <Modal isOpen={true} contentLabel="Transaction failed" onConfirmed={closeModal}>
|
{modal == 'transactionFailed' && <Modal isOpen={true} contentLabel={__("Transaction failed")} onConfirmed={closeModal}>
|
||||||
Something went wrong:
|
{__("Something went wrong")}:
|
||||||
</Modal>}
|
</Modal>}
|
||||||
</section>
|
</section>
|
||||||
)
|
)
|
||||||
|
|
|
@ -11,7 +11,7 @@ jsonrpc.call = function (connectionString, method, params, callback, errorCallba
|
||||||
connectFailedCallback(e);
|
connectFailedCallback(e);
|
||||||
});
|
});
|
||||||
xhr.addEventListener('timeout', function() {
|
xhr.addEventListener('timeout', function() {
|
||||||
connectFailedCallback(new Error('XMLHttpRequest connection timed out'));
|
connectFailedCallback(new Error(__('XMLHttpRequest connection timed out')));
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
xhr.addEventListener('load', function() {
|
xhr.addEventListener('load', function() {
|
||||||
|
@ -50,7 +50,7 @@ jsonrpc.call = function (connectionString, method, params, callback, errorCallba
|
||||||
method: method,
|
method: method,
|
||||||
params: params,
|
params: params,
|
||||||
code: xhr.status,
|
code: xhr.status,
|
||||||
message: 'Connection to API server failed'
|
message: __('Connection to API server failed')
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
document.dispatchEvent(errorEvent);
|
document.dispatchEvent(errorEvent);
|
||||||
|
|
|
@ -111,7 +111,7 @@ lbry.connect = function() {
|
||||||
}, tryNum < 100 ? 200 : 1000);
|
}, tryNum < 100 ? 200 : 1000);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
reject(new Error("Unable to connect to LBRY"));
|
reject(new Error(__("Unable to connect to LBRY")));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -422,7 +422,7 @@ lbry._resolveXhrs = {}
|
||||||
lbry.resolve = function(params={}) {
|
lbry.resolve = function(params={}) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
if (!params.uri) {
|
if (!params.uri) {
|
||||||
throw "Resolve has hacked cache on top of it that requires a URI"
|
throw __("Resolve has hacked cache on top of it that requires a URI")
|
||||||
}
|
}
|
||||||
if (params.uri && lbry._claimCache[params.uri] !== undefined) {
|
if (params.uri && lbry._claimCache[params.uri] !== undefined) {
|
||||||
resolve(lbry._claimCache[params.uri]);
|
resolve(lbry._claimCache[params.uri]);
|
||||||
|
|
|
@ -34,20 +34,20 @@ lbryio.getExchangeRates = function() {
|
||||||
lbryio.call = function(resource, action, params={}, method='get', evenIfDisabled=false) { // evenIfDisabled is just for development, when we may have some calls working and some not
|
lbryio.call = function(resource, action, params={}, method='get', evenIfDisabled=false) { // evenIfDisabled is just for development, when we may have some calls working and some not
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
if (!lbryio.enabled && !evenIfDisabled && (resource != 'discover' || action != 'list')) {
|
if (!lbryio.enabled && !evenIfDisabled && (resource != 'discover' || action != 'list')) {
|
||||||
console.log("Internal API disabled");
|
console.log(__("Internal API disabled"));
|
||||||
reject(new Error("LBRY internal API is disabled"))
|
reject(new Error(__("LBRY internal API is disabled")))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
const xhr = new XMLHttpRequest;
|
const xhr = new XMLHttpRequest;
|
||||||
|
|
||||||
xhr.addEventListener('error', function (event) {
|
xhr.addEventListener('error', function (event) {
|
||||||
reject(new Error("Something went wrong making an internal API call."));
|
reject(new Error(__("Something went wrong making an internal API call.")));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
xhr.addEventListener('timeout', function() {
|
xhr.addEventListener('timeout', function() {
|
||||||
reject(new Error('XMLHttpRequest connection timed out'));
|
reject(new Error(__('XMLHttpRequest connection timed out')));
|
||||||
});
|
});
|
||||||
|
|
||||||
xhr.addEventListener('load', function() {
|
xhr.addEventListener('load', function() {
|
||||||
|
@ -89,7 +89,7 @@ lbryio.call = function(resource, action, params={}, method='get', evenIfDisabled
|
||||||
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
|
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
|
||||||
xhr.send(querystring.stringify(fullParams));
|
xhr.send(querystring.stringify(fullParams));
|
||||||
} else {
|
} else {
|
||||||
reject(new Error("Invalid method"));
|
reject(new Error(__("Invalid method")));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
@ -138,7 +138,7 @@ lbryio.authenticate = function() {
|
||||||
app_id: installation_id,
|
app_id: installation_id,
|
||||||
}, 'post').then(function(responseData) {
|
}, 'post').then(function(responseData) {
|
||||||
if (!responseData.id) {
|
if (!responseData.id) {
|
||||||
reject(new Error("Received invalid authentication response."));
|
reject(new Error(__("Received invalid authentication response.")));
|
||||||
}
|
}
|
||||||
lbryio.setAccessToken(installation_id)
|
lbryio.setAccessToken(installation_id)
|
||||||
setCurrentUser()
|
setCurrentUser()
|
||||||
|
|
|
@ -39,12 +39,12 @@ lbryuri.parse = function(uri, requireProto=false) {
|
||||||
|
|
||||||
// Validate protocol
|
// Validate protocol
|
||||||
if (requireProto && !proto) {
|
if (requireProto && !proto) {
|
||||||
throw new Error('LBRY URIs must include a protocol prefix (lbry://).');
|
throw new Error(__('LBRY URIs must include a protocol prefix (lbry://).'));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Validate and process name
|
// Validate and process name
|
||||||
if (!name) {
|
if (!name) {
|
||||||
throw new Error('URI does not include name.');
|
throw new Error(__('URI does not include name.'));
|
||||||
}
|
}
|
||||||
|
|
||||||
const isChannel = name.startsWith('@');
|
const isChannel = name.startsWith('@');
|
||||||
|
@ -52,11 +52,11 @@ lbryuri.parse = function(uri, requireProto=false) {
|
||||||
|
|
||||||
if (isChannel) {
|
if (isChannel) {
|
||||||
if (!channelName) {
|
if (!channelName) {
|
||||||
throw new Error('No channel name after @.');
|
throw new Error(__('No channel name after @.'));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (channelName.length < CHANNEL_NAME_MIN_LEN) {
|
if (channelName.length < CHANNEL_NAME_MIN_LEN) {
|
||||||
throw new Error(`Channel names must be at least ${CHANNEL_NAME_MIN_LEN} characters.`);
|
throw new Error(__(`Channel names must be at least %s characters.`, CHANNEL_NAME_MIN_LEN));
|
||||||
}
|
}
|
||||||
|
|
||||||
contentName = path;
|
contentName = path;
|
||||||
|
@ -64,14 +64,14 @@ lbryuri.parse = function(uri, requireProto=false) {
|
||||||
|
|
||||||
const nameBadChars = (channelName || name).match(/[^A-Za-z0-9-]/g);
|
const nameBadChars = (channelName || name).match(/[^A-Za-z0-9-]/g);
|
||||||
if (nameBadChars) {
|
if (nameBadChars) {
|
||||||
throw new Error(`Invalid character${nameBadChars.length == 1 ? '' : 's'} in name: ${nameBadChars.join(', ')}.`);
|
throw new Error(__(`Invalid character %s in name: %s.`, nameBadChars.length == 1 ? '' : 's', nameBadChars.join(', ') ));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Validate and process modifier (claim ID, bid position or claim sequence)
|
// Validate and process modifier (claim ID, bid position or claim sequence)
|
||||||
let claimId, claimSequence, bidPosition;
|
let claimId, claimSequence, bidPosition;
|
||||||
if (modSep) {
|
if (modSep) {
|
||||||
if (!modVal) {
|
if (!modVal) {
|
||||||
throw new Error(`No modifier provided after separator ${modSep}.`);
|
throw new Error(__(`No modifier provided after separator %s.`, modSep));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (modSep == '#') {
|
if (modSep == '#') {
|
||||||
|
@ -84,31 +84,31 @@ lbryuri.parse = function(uri, requireProto=false) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (claimId && (claimId.length > CLAIM_ID_MAX_LEN || !claimId.match(/^[0-9a-f]+$/))) {
|
if (claimId && (claimId.length > CLAIM_ID_MAX_LEN || !claimId.match(/^[0-9a-f]+$/))) {
|
||||||
throw new Error(`Invalid claim ID ${claimId}.`);
|
throw new Error(__(`Invalid claim ID %s.`, claimId));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (claimSequence && !claimSequence.match(/^-?[1-9][0-9]*$/)) {
|
if (claimSequence && !claimSequence.match(/^-?[1-9][0-9]*$/)) {
|
||||||
throw new Error('Claim sequence must be a number.');
|
throw new Error(__('Claim sequence must be a number.'));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (bidPosition && !bidPosition.match(/^-?[1-9][0-9]*$/)) {
|
if (bidPosition && !bidPosition.match(/^-?[1-9][0-9]*$/)) {
|
||||||
throw new Error('Bid position must be a number.');
|
throw new Error(__('Bid position must be a number.'));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Validate and process path
|
// Validate and process path
|
||||||
if (path) {
|
if (path) {
|
||||||
if (!isChannel) {
|
if (!isChannel) {
|
||||||
throw new Error('Only channel URIs may have a path.');
|
throw new Error(__('Only channel URIs may have a path.'));
|
||||||
}
|
}
|
||||||
|
|
||||||
const pathBadChars = path.match(/[^A-Za-z0-9-]/g);
|
const pathBadChars = path.match(/[^A-Za-z0-9-]/g);
|
||||||
if (pathBadChars) {
|
if (pathBadChars) {
|
||||||
throw new Error(`Invalid character${count == 1 ? '' : 's'} in path: ${nameBadChars.join(', ')}`);
|
throw new Error(__(`Invalid character %s in path: %s`,count == 1 ? '' : 's',nameBadChars.join(', ')));
|
||||||
}
|
}
|
||||||
|
|
||||||
contentName = path;
|
contentName = path;
|
||||||
} else if (pathSep) {
|
} else if (pathSep) {
|
||||||
throw new Error('No path provided after /');
|
throw new Error(__('No path provided after /'));
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
@ -135,7 +135,7 @@ lbryuri.build = function(uriObj, includeProto=true, allowExtraProps=false) {
|
||||||
if (!name) {
|
if (!name) {
|
||||||
name = channelNameFormatted;
|
name = channelNameFormatted;
|
||||||
} else if (name !== channelNameFormatted) {
|
} else if (name !== channelNameFormatted) {
|
||||||
throw new Error('Received a channel content URI, but name and channelName do not match. "name" represents the value in the name position of the URI (lbry://name...), which for channel content will be the channel name. In most cases, to construct a channel URI you should just pass channelName and contentName.');
|
throw new Error(__('Received a channel content URI, but name and channelName do not match. \"name\" represents the value in the name position of the URI (lbry://name...), which for channel content will be the channel name. In most cases, to construct a channel URI you should just pass channelName and contentName.'));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -146,7 +146,7 @@ lbryuri.build = function(uriObj, includeProto=true, allowExtraProps=false) {
|
||||||
path = contentName;
|
path = contentName;
|
||||||
}
|
}
|
||||||
if (path && path !== contentName) {
|
if (path && path !== contentName) {
|
||||||
throw new Error('path and contentName do not match. Only one is required; most likely you wanted contentName.');
|
throw new Error(__('Path and contentName do not match. Only one is required; most likely you wanted contentName.'));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -21,7 +21,7 @@ function getServers() {
|
||||||
|
|
||||||
function call(method, params, callback, errorCallback) {
|
function call(method, params, callback, errorCallback) {
|
||||||
if (connectTryNum >= maxQueryTries) {
|
if (connectTryNum >= maxQueryTries) {
|
||||||
errorCallback(new Error(`Could not connect to Lighthouse server. Last server attempted: ${server}`));
|
errorCallback(new Error(__(`Could not connect to Lighthouse server. Last server attempted: %s`, server)));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -42,7 +42,7 @@ class DeveloperPage extends React.Component {
|
||||||
handleForceUpgradeClick() {
|
handleForceUpgradeClick() {
|
||||||
let upgradeSent = false;
|
let upgradeSent = false;
|
||||||
if (!this.state.upgradePath) {
|
if (!this.state.upgradePath) {
|
||||||
alert('Please select a file to upgrade from');
|
alert(__('Please select a file to upgrade from'));
|
||||||
} else {
|
} else {
|
||||||
try {
|
try {
|
||||||
const stats = fs.lstatSync(this.state.upgradePath);
|
const stats = fs.lstatSync(this.state.upgradePath);
|
||||||
|
|
|
@ -24,7 +24,7 @@ export class RewardTile extends React.Component {
|
||||||
</div>
|
</div>
|
||||||
<div className="card__actions">
|
<div className="card__actions">
|
||||||
{this.props.claimed
|
{this.props.claimed
|
||||||
? <span><Icon icon="icon-check" /> Reward claimed.</span>
|
? <span><Icon icon="icon-check" /> {__("Reward claimed.")}</span>
|
||||||
: <RewardLink {...this.props} />}
|
: <RewardLink {...this.props} />}
|
||||||
</div>
|
</div>
|
||||||
<div className="card__content">{this.props.description}</div>
|
<div className="card__content">{this.props.description}</div>
|
||||||
|
@ -64,9 +64,9 @@ export class RewardsPage extends React.Component {
|
||||||
<SubHeader />
|
<SubHeader />
|
||||||
<div>
|
<div>
|
||||||
{!this.state.userRewards
|
{!this.state.userRewards
|
||||||
? (this.state.failed ? <div className="empty">Failed to load rewards.</div> : '')
|
? (this.state.failed ? <div className="empty">{__("Failed to load rewards.")}</div> : '')
|
||||||
: this.state.userRewards.map(({reward_type, reward_title, reward_description, transaction_id, reward_amount}) => {
|
: this.state.userRewards.map(({reward_type, reward_title, reward_description, transaction_id, reward_amount}) => {
|
||||||
return <RewardTile key={reward_type} onRewardClaim={this.loadRewards} type={reward_type} title={reward_title} description={reward_description} claimed={!!transaction_id} value={reward_amount} />;
|
return <RewardTile key={reward_type} onRewardClaim={this.loadRewards} type={reward_type} title={__(reward_title)} description={__(reward_description)} claimed={!!transaction_id} value={reward_amount} />;
|
||||||
})}
|
})}
|
||||||
</div>
|
</div>
|
||||||
</main>
|
</main>
|
||||||
|
|
|
@ -7,13 +7,13 @@ import {
|
||||||
|
|
||||||
function rewardMessage(type, amount) {
|
function rewardMessage(type, amount) {
|
||||||
return {
|
return {
|
||||||
new_developer: `You earned ${amount} for registering as a new developer.`,
|
new_developer: __(`You earned %s for registering as a new developer.`, amount),
|
||||||
new_user: `You earned ${amount} LBC new user reward.`,
|
new_user: __(`You earned %s LBC new user reward.`, amount),
|
||||||
confirm_email: `You earned ${amount} LBC for verifying your email address.`,
|
confirm_email: __(`You earned %s LBC for verifying your email address.`, amount),
|
||||||
new_channel: `You earned ${amount} LBC for creating a publisher identity.`,
|
new_channel: __(`You earned %s LBC for creating a publisher identity.`, amount),
|
||||||
first_stream: `You earned ${amount} LBC for streaming your first video.`,
|
first_stream: __(`You earned %s LBC for streaming your first video.`, amount),
|
||||||
many_downloads: `You earned ${amount} LBC for downloading some of the things.`,
|
many_downloads: __(`You earned %s LBC for downloading some of the things.`, amount),
|
||||||
first_publish: `You earned ${amount} LBC for making your first publication.`,
|
first_publish: __(`You earned %s LBC for making your first publication.`, amount),
|
||||||
}[type];
|
}[type];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -81,7 +81,7 @@ rewards.claimReward = function (type) {
|
||||||
|
|
||||||
function requestReward(resolve, reject, params) {
|
function requestReward(resolve, reject, params) {
|
||||||
if (!lbryio.enabled) {
|
if (!lbryio.enabled) {
|
||||||
reject(new Error("Rewards are not enabled."))
|
reject(new Error(__("Rewards are not enabled.")))
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
lbryio.call('reward', 'new', params, 'post').then(({reward_amount}) => {
|
lbryio.call('reward', 'new', params, 'post').then(({reward_amount}) => {
|
||||||
|
@ -96,7 +96,7 @@ rewards.claimReward = function (type) {
|
||||||
// Display global notice
|
// Display global notice
|
||||||
const action = doShowSnackBar({
|
const action = doShowSnackBar({
|
||||||
message,
|
message,
|
||||||
linkText: "Show All",
|
linkText: __("Show All"),
|
||||||
linkTarget: "/rewards",
|
linkTarget: "/rewards",
|
||||||
isError: false,
|
isError: false,
|
||||||
})
|
})
|
||||||
|
@ -125,7 +125,7 @@ rewards.claimReward = function (type) {
|
||||||
params.transaction_id = claim.txid;
|
params.transaction_id = claim.txid;
|
||||||
requestReward(resolve, reject, params)
|
requestReward(resolve, reject, params)
|
||||||
} else {
|
} else {
|
||||||
reject(new Error("Please create a channel identity first."))
|
reject(new Error(__("Please create a channel identity first.")))
|
||||||
}
|
}
|
||||||
}).catch(reject)
|
}).catch(reject)
|
||||||
break;
|
break;
|
||||||
|
@ -140,8 +140,8 @@ rewards.claimReward = function (type) {
|
||||||
requestReward(resolve, reject, params)
|
requestReward(resolve, reject, params)
|
||||||
} else {
|
} else {
|
||||||
reject(claims.length ?
|
reject(claims.length ?
|
||||||
new Error("Please publish something and wait for confirmation by the network to claim this reward.") :
|
new Error(__("Please publish something and wait for confirmation by the network to claim this reward.")) :
|
||||||
new Error("Please publish something to claim this reward."))
|
new Error(__("Please publish something to claim this reward.")))
|
||||||
}
|
}
|
||||||
}).catch(reject)
|
}).catch(reject)
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in a new issue