feat(translations-ru): more translations (part 2)
This commit is contained in:
parent
7f172cf6be
commit
c341130da1
@ -40,14 +40,14 @@ export default class ConfigPage extends Page {
|
||||
return (
|
||||
<div>
|
||||
<div className='row center pad0-75'>
|
||||
<RaisedButton label="Back to main page" primary={true} onClick={() => {
|
||||
<RaisedButton label={__('Back to main page')} primary={true} onClick={() => {
|
||||
window.router('/')
|
||||
}} />
|
||||
</div>
|
||||
<div className='column center w100p pad0-75'>
|
||||
<Toggle
|
||||
style={{marginTop: '10px'}}
|
||||
label="Enabled network scanning"
|
||||
label={__('Enabled network scanning')}
|
||||
toggled={this.options.indexer}
|
||||
onToggle={(e, checked) => {
|
||||
this.options.indexer = checked
|
||||
@ -58,11 +58,11 @@ export default class ConfigPage extends Page {
|
||||
/>
|
||||
<div className='column w100p'>
|
||||
<div className='row inline w100p'>
|
||||
<div style={{flex: 1}}>Scanning port</div>
|
||||
<div style={{flex: 1}}>{__('Scanning port')}</div>
|
||||
<TextField
|
||||
style={{width: 65}}
|
||||
hintText="Port"
|
||||
errorText={this.options.spiderPort > 0 ? undefined : "This field is required"}
|
||||
hintText={__('Port')}
|
||||
errorText={this.options.spiderPort > 0 ? undefined : __('This field is required')}
|
||||
value={this.options.spiderPort}
|
||||
onChange={(e, value) => {
|
||||
if(!value)
|
||||
@ -75,16 +75,16 @@ export default class ConfigPage extends Page {
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
<div className='fs0-75' style={{color: 'grey'}}>* For current work TCP and UDP ports must be fully open and forward in case of router usage</div>
|
||||
<div className='fs0-75' style={{color: 'grey'}}>* {__('For current work TCP and UDP ports must be fully open and forward in case of router usage')}</div>
|
||||
</div>
|
||||
|
||||
<div className='column w100p'>
|
||||
<div className='row inline w100p'>
|
||||
<div style={{flex: 1}}>Trackers responce port</div>
|
||||
<div style={{flex: 1}}>{__('Trackers responce port')}</div>
|
||||
<TextField
|
||||
style={{width: 65}}
|
||||
hintText="Port"
|
||||
errorText={this.options.udpTrackersPort > 0 ? undefined : "This field is required"}
|
||||
errorText={this.options.udpTrackersPort > 0 ? undefined : __('This field is required')}
|
||||
value={this.options.udpTrackersPort}
|
||||
onChange={(e, value) => {
|
||||
if(!value)
|
||||
@ -97,12 +97,12 @@ export default class ConfigPage extends Page {
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
<div className='fs0-75' style={{color: 'grey'}}>* For current work UDP port must be fully open and forward in case of router usage</div>
|
||||
<div className='fs0-75' style={{color: 'grey'}}>* {__('For current work UDP port must be fully open and forward in case of router usage')}</div>
|
||||
</div>
|
||||
|
||||
<Toggle
|
||||
style={{marginTop: '10px'}}
|
||||
label="Enabled UPnP"
|
||||
label={__('Enabled UPnP')}
|
||||
toggled={this.options.upnp}
|
||||
onToggle={(e, checked) => {
|
||||
this.options.upnp = checked
|
||||
@ -111,10 +111,10 @@ export default class ConfigPage extends Page {
|
||||
/>
|
||||
|
||||
<div className='row inline w100p'>
|
||||
<div style={{flex: 1}}>Collection directory</div>
|
||||
<div style={{flex: 1}}>{__('Collection directory')}</div>
|
||||
<TextField
|
||||
hintText="Db path"
|
||||
errorText={this.options.dbPath && this.options.dbPath.length > 0 ? undefined : "This field is required"}
|
||||
hintText={__('Db path')}
|
||||
errorText={this.options.dbPath && this.options.dbPath.length > 0 ? undefined : __('This field is required')}
|
||||
value={this.options.dbPath}
|
||||
onChange={(e, value) => {
|
||||
if(!fs.existsSync(value))
|
||||
@ -124,7 +124,7 @@ export default class ConfigPage extends Page {
|
||||
this.forceUpdate()
|
||||
}}
|
||||
/>
|
||||
<RaisedButton style={{marginLeft: 20}} label="Browse" primary={true} onClick={() => {
|
||||
<RaisedButton style={{marginLeft: 20}} label={__('Browse')} primary={true} onClick={() => {
|
||||
if(!dialog)
|
||||
return
|
||||
const dir = dialog.showOpenDialog({properties: ['openDirectory']})[0]
|
||||
@ -137,9 +137,9 @@ export default class ConfigPage extends Page {
|
||||
</div>
|
||||
|
||||
<div className='row inline w100p'>
|
||||
<div style={{flex: 1}}>Download torrents directory</div>
|
||||
<div style={{flex: 1}}>{__('Download torrents directory')}</div>
|
||||
<TextField
|
||||
hintText="Download path"
|
||||
hintText={__('Download path')}
|
||||
value={this.options.client && this.options.client.downloadPath}
|
||||
onChange={(e, value) => {
|
||||
if(!fs.existsSync(value))
|
||||
@ -149,7 +149,7 @@ export default class ConfigPage extends Page {
|
||||
this.forceUpdate()
|
||||
}}
|
||||
/>
|
||||
<RaisedButton style={{marginLeft: 20}} label="Browse" primary={true} onClick={() => {
|
||||
<RaisedButton style={{marginLeft: 20}} label={__('Browse')} primary={true} onClick={() => {
|
||||
if(!dialog)
|
||||
return
|
||||
const dir = dialog.showOpenDialog({properties: ['openDirectory']})[0]
|
||||
@ -161,10 +161,10 @@ export default class ConfigPage extends Page {
|
||||
}} />
|
||||
</div>
|
||||
|
||||
<div style={{marginTop: 10}}>P2P Rats network settings:</div>
|
||||
<div style={{marginTop: 10}}>{__('P2P Rats network settings')}:</div>
|
||||
<Toggle
|
||||
style={{marginTop: '10px'}}
|
||||
label="Enabled p2p search"
|
||||
label={__('Enabled p2p search')}
|
||||
toggled={this.options.p2p}
|
||||
onToggle={(e, checked) => {
|
||||
this.options.p2p = this.options.indexer && checked
|
||||
@ -174,18 +174,18 @@ export default class ConfigPage extends Page {
|
||||
<div className='column w100p'>
|
||||
<Toggle
|
||||
style={{marginTop: '10px'}}
|
||||
label="Enabled bootstrap peers"
|
||||
label={__('Enabled bootstrap peers')}
|
||||
toggled={this.options.p2pBootstrap}
|
||||
onToggle={(e, checked) => {
|
||||
this.options.p2pBootstrap = checked
|
||||
this.forceUpdate()
|
||||
}}
|
||||
/>
|
||||
<div className='fs0-75' style={{color: 'grey'}}>* Use extrnral bootstrap nodes to get p2p peers when network setted wrong or need external source</div>
|
||||
<div className='fs0-75' style={{color: 'grey'}}>* {__('Use extrnral bootstrap nodes to get p2p peers when network setted wrong or need external source')}</div>
|
||||
</div>
|
||||
<div className='column w100p'>
|
||||
<div className='row inline w100p'>
|
||||
<div style={{flex: 1}}>Max peers limit (current: {this.options.p2pConnections})</div>
|
||||
<div style={{flex: 1}}>{__('Max peers limit')} ({__('current')}: {this.options.p2pConnections})</div>
|
||||
<Slider
|
||||
min={10}
|
||||
max={25}
|
||||
@ -202,21 +202,21 @@ export default class ConfigPage extends Page {
|
||||
<div className='column w100p'>
|
||||
<Toggle
|
||||
style={{marginTop: '10px'}}
|
||||
label="P2P torrents replication"
|
||||
label={__('P2P torrents replication')}
|
||||
toggled={this.options.p2pReplication}
|
||||
onToggle={(e, checked) => {
|
||||
this.options.p2pReplication = checked
|
||||
this.forceUpdate()
|
||||
}}
|
||||
/>
|
||||
<div className='fs0-75' style={{color: 'grey'}}>* Enable torrents replication from another rats clients. Dont recomended if torrent scanner works correct.</div>
|
||||
<div className='fs0-75' style={{color: 'grey'}}>* {__('Enable torrents replication from another rats clients. Dont recomended if torrent scanner works correct')}.</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div style={{marginTop: 10}}>Torrent network scanner settings:</div>
|
||||
<div style={{marginTop: 10}}>{__('Torrent network scanner settings')}:</div>
|
||||
<div className='column w100p'>
|
||||
<div className='row inline w100p'>
|
||||
<div style={{flex: 1}}>Scanner walk speed (current: {this.options.spider && this.options.spider.walkInterval}) [affected after program reload]</div>
|
||||
<div style={{flex: 1}}>{__('Scanner walk speed')} ({__('current')}: {this.options.spider && this.options.spider.walkInterval}) [{__('affected after program reload')}]</div>
|
||||
<Slider
|
||||
min={1}
|
||||
max={150}
|
||||
@ -229,12 +229,12 @@ export default class ConfigPage extends Page {
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
<div className='fs0-75' style={{color: 'grey'}}>* Low value - fast initial scanning and high cpu usage. High Value - low cpu usage but very slow scanning.
|
||||
Good value between 3-60. Defaul value: 5</div>
|
||||
<div className='fs0-75' style={{color: 'grey'}}>* {__('Low value')} - {__('fast initial scanning and high cpu usage')}. {__('High Value')} - {__('low cpu usage but very slow scanning')}.
|
||||
{__('Good value between')} 3-60. {__('Defaul value')}: 5</div>
|
||||
</div>
|
||||
<div className='column w100p'>
|
||||
<div className='row inline w100p'>
|
||||
<div style={{flex: 1}}>Nodes usage (current: {this.options.spider && this.options.spider.nodesUsage})</div>
|
||||
<div style={{flex: 1}}>{__('Nodes usage')} ({__('current')}: {this.options.spider && this.options.spider.nodesUsage})</div>
|
||||
<Slider
|
||||
min={0}
|
||||
max={1000}
|
||||
@ -247,13 +247,13 @@ export default class ConfigPage extends Page {
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
<div className='fs0-75' style={{color: 'grey'}}>* Low Value - very low usage of nodes, low network traffic, slow torrent scanning. High value - high traffic, fast scanning, high routers usage.
|
||||
Recomended value between 10-1000. Defaul value: 100. 0 - Ignore this option (no limit).
|
||||
<div className='fs0-75' style={{color: 'grey'}}>* {__('Low Value')} - {__('very low usage of nodes, low network traffic, slow torrent scanning')}. {__('High value')} - {__('high traffic, fast scanning, high routers usage')}.
|
||||
{__('Recomended value between')} 10-1000. {__('Defaul value')}: 100. 0 - {__('Ignore this option')} ({__('no limit')}).
|
||||
</div>
|
||||
</div>
|
||||
<div className='column w100p'>
|
||||
<div className='row inline w100p'>
|
||||
<div style={{flex: 1}}>Reduce network packages (current: {this.options.spider && this.options.spider.packagesLimit})</div>
|
||||
<div style={{flex: 1}}>{__('Reduce network packages')} ({__('current')}: {this.options.spider && this.options.spider.packagesLimit})</div>
|
||||
<Slider
|
||||
min={0}
|
||||
max={2000}
|
||||
@ -266,19 +266,19 @@ export default class ConfigPage extends Page {
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
<div className='fs0-75' style={{color: 'grey'}}>* Low Value - ignore more usless network packages, lower traffic and routers usage. High Value - high traffic and router usage in prospect.
|
||||
Recomended value between 300-2000. Defaul value: 500. 0 - Ignore this option (no limit).
|
||||
<div className='fs0-75' style={{color: 'grey'}}>* {__('Low Value')} - {__('ignore more usless network packages, lower traffic and routers usage')}. {__('High Value')} - {__('high traffic and router usage in prospect')}.
|
||||
{__('Recomended value between')} 300-2000. {__('Defaul value')}: 500. 0 - {__('Ignore this option')} ({__('no limit')}).
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{
|
||||
this.settingsSavedMessage
|
||||
&&
|
||||
<div style={{color: 'green'}}>Settings saved</div>
|
||||
<div style={{color: 'green'}}>{__('Settings saved')}</div>
|
||||
}
|
||||
|
||||
<div className='row center pad0-75'>
|
||||
<RaisedButton label="Save Settings" primary={true} onClick={() => {
|
||||
<RaisedButton label={__('Save Settings')} primary={true} onClick={() => {
|
||||
this.saveSettings()
|
||||
}} />
|
||||
</div>
|
||||
|
@ -40,7 +40,7 @@ export default class TopPage extends Page {
|
||||
return (
|
||||
<div>
|
||||
<div className='column center w100p pad0-75'>
|
||||
<RaisedButton label="Back to main page" primary={true} onClick={() => {
|
||||
<RaisedButton label={__('Back to main page')} primary={true} onClick={() => {
|
||||
window.router('/')
|
||||
}} />
|
||||
<List style={{paddingBottom: '70px'}} className='animated recent-torrents'>
|
||||
|
@ -39,7 +39,7 @@ export default class ConfigPage extends Page {
|
||||
return (
|
||||
<div>
|
||||
<div className='row center pad0-75'>
|
||||
<RaisedButton label="Back to main page" primary={true} onClick={() => {
|
||||
<RaisedButton label={__("Back to main page")} primary={true} onClick={() => {
|
||||
window.router('/')
|
||||
}} />
|
||||
</div>
|
||||
@ -48,7 +48,7 @@ export default class ConfigPage extends Page {
|
||||
|
||||
<div className='column w100p'>
|
||||
<div className='row inline w100p'>
|
||||
<div style={{flex: 1}}>Max files per torrent (current: {this.options.filters && this.options.filters.maxFiles})</div>
|
||||
<div style={{flex: 1}}>{__('Max files per torrent')} ({__('current')}: {this.options.filters && this.options.filters.maxFiles})</div>
|
||||
<Slider
|
||||
min={0}
|
||||
max={50000}
|
||||
@ -61,7 +61,7 @@ export default class ConfigPage extends Page {
|
||||
}}
|
||||
/>
|
||||
<TextField
|
||||
hintText="Max files"
|
||||
hintText={__('Max files')}
|
||||
className='pad0-75'
|
||||
style={{width: 200}}
|
||||
value={this.options.filters && this.options.filters.maxFiles}
|
||||
@ -74,13 +74,13 @@ export default class ConfigPage extends Page {
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
<div className='fs0-75' style={{color: 'grey'}}>* 0 - Disabled.
|
||||
<div className='fs0-75' style={{color: 'grey'}}>* 0 - {__('Disabled')}.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className='column w100p'>
|
||||
<div className='row inline w100p'>
|
||||
<div style={{flex: 1}}>Torrent name regular extension filtering</div>
|
||||
<div style={{flex: 1}}>{__('Torrent name regular extension filtering')}</div>
|
||||
<TextField
|
||||
hintText="regex"
|
||||
className='pad0-75'
|
||||
@ -96,7 +96,7 @@ export default class ConfigPage extends Page {
|
||||
/>
|
||||
<SelectField
|
||||
style={{marginLeft: 15}}
|
||||
floatingLabelText="Examples"
|
||||
floatingLabelText={__('Examples')}
|
||||
value={this.options.filters && this.options.filters.namingRegExp}
|
||||
onChange={(event, index, value) => {
|
||||
if(!this.options.filters)
|
||||
@ -106,14 +106,14 @@ export default class ConfigPage extends Page {
|
||||
this.forceUpdate()
|
||||
}}
|
||||
>
|
||||
<MenuItem value={String.raw`^[А-Яа-я0-9A-Za-z.!@?#"$%&:;() *\+,\/;\-=[\\\]\^_{|}<>\u0400-\u04FF]+$`} primaryText="Russian + English only (With symbols)" />
|
||||
<MenuItem value={'^[0-9A-Za-z.!@?#"$%&:;() *\+,\/;\-=[\\\]\^_{|}<>]+$'} primaryText="English only (With symbols)" />
|
||||
<MenuItem value={'^((?!badword).)*$'} primaryText="Ignore badword" />
|
||||
<MenuItem value={String.raw`^[А-Яа-я0-9A-Za-z.!@?#"$%&:;() *\+,\/;\-=[\\\]\^_{|}<>\u0400-\u04FF]+$`} primaryText={__('Russian + English only (With symbols)')} />
|
||||
<MenuItem value={'^[0-9A-Za-z.!@?#"$%&:;() *\+,\/;\-=[\\\]\^_{|}<>]+$'} primaryText={__('English only (With symbols)')} />
|
||||
<MenuItem value={'^((?!badword).)*$'} primaryText={__('Ignore badword')} />
|
||||
</SelectField>
|
||||
</div>
|
||||
<Toggle
|
||||
style={{marginTop: '10px'}}
|
||||
label="Negative regular extension filtering"
|
||||
label={__('Negative regular extension filtering')}
|
||||
toggled={this.options.filters && this.options.filters.namingRegExpNegative}
|
||||
onToggle={(e, checked) => {
|
||||
if(!this.options.filters)
|
||||
@ -124,13 +124,13 @@ export default class ConfigPage extends Page {
|
||||
}}
|
||||
/>
|
||||
<div className='fs0-75' style={{color: 'grey'}}>
|
||||
* - clean string means disabled
|
||||
* - {__('clean string means disabled')}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<Toggle
|
||||
style={{marginTop: '10px'}}
|
||||
label="Adult filter"
|
||||
label={__('Adult filter')}
|
||||
toggled={this.options.filters && this.options.filters.adultFilter}
|
||||
onToggle={(e, checked) => {
|
||||
if(!this.options.filters)
|
||||
@ -145,14 +145,14 @@ export default class ConfigPage extends Page {
|
||||
{
|
||||
this.toRemoveProbably && this.toRemoveProbably > 0
|
||||
?
|
||||
<div style={{color: 'orange'}}>Torrents to clean: {this.toRemoveProbably}</div>
|
||||
<div style={{color: 'orange'}}>{__('Torrents to clean')}: {this.toRemoveProbably}</div>
|
||||
:
|
||||
null
|
||||
}
|
||||
{
|
||||
this.toRemove && this.toRemove > 0
|
||||
?
|
||||
<div style={{color: 'red'}}>Torrents cleaned: {this.toRemove}</div>
|
||||
<div style={{color: 'red'}}>{__('Torrents cleaned')}: {this.toRemove}</div>
|
||||
:
|
||||
null
|
||||
}
|
||||
@ -160,17 +160,17 @@ export default class ConfigPage extends Page {
|
||||
{
|
||||
this.settingsSavedMessage
|
||||
&&
|
||||
<div style={{color: 'green'}}>Settings saved</div>
|
||||
<div style={{color: 'green'}}>{__('Settings saved')}</div>
|
||||
}
|
||||
|
||||
<div className='row center pad0-75'>
|
||||
<RaisedButton label="Check torrents" primary={true} onClick={() => {
|
||||
<RaisedButton label={__('Check torrents')} primary={true} onClick={() => {
|
||||
window.torrentSocket.emit('removeTorrents', true, window.customLoader((toRemove) => {
|
||||
this.toRemoveProbably = toRemove
|
||||
this.forceUpdate()
|
||||
}));
|
||||
}} />
|
||||
<RaisedButton label="Clean torrents" secondary={true} onClick={() => {
|
||||
<RaisedButton label={__('Clean torrents')} secondary={true} onClick={() => {
|
||||
window.torrentSocket.emit('removeTorrents', false, window.customLoader((toRemove) => {
|
||||
this.toRemove = toRemove
|
||||
this.forceUpdate()
|
||||
@ -179,7 +179,7 @@ export default class ConfigPage extends Page {
|
||||
</div>
|
||||
|
||||
<div className='row center pad0-75'>
|
||||
<RaisedButton label="Save Settings" primary={true} onClick={() => {
|
||||
<RaisedButton label={__('Save Settings')} primary={true} onClick={() => {
|
||||
this.saveSettings()
|
||||
}} />
|
||||
</div>
|
||||
|
@ -40,7 +40,7 @@ export default class IndexPage extends Page {
|
||||
searchText={Search.instance().currentSearch}
|
||||
resultSelector={
|
||||
<SelectField
|
||||
floatingLabelText="Sort by"
|
||||
floatingLabelText={__("Sort by")}
|
||||
floatingLabelFixed={true}
|
||||
value={Search.instance().state.orderBy}
|
||||
onChange={(event, index, value) => {
|
||||
@ -68,13 +68,13 @@ export default class IndexPage extends Page {
|
||||
})
|
||||
}}
|
||||
>
|
||||
<MenuItem value='none' primaryText={'None'} />
|
||||
<MenuItem value='seeders' primaryText={orderText('Seeders', 'seeders')} />
|
||||
<MenuItem value='name' primaryText={orderText('Name', 'name')} />
|
||||
<MenuItem value='files' primaryText={orderText('Files', 'files')} />
|
||||
<MenuItem value='size' primaryText={orderText('Size', 'size')} />
|
||||
<MenuItem value='added' primaryText={orderText('Added date', 'added')} />
|
||||
<MenuItem value='completed' primaryText={orderText('Completed', 'completed')} />
|
||||
<MenuItem value='none' primaryText={__('None')} />
|
||||
<MenuItem value='seeders' primaryText={orderText(__('Seeders'), 'seeders')} />
|
||||
<MenuItem value='name' primaryText={orderText(__('Name'), 'name')} />
|
||||
<MenuItem value='files' primaryText={orderText(__('Files'), 'files')} />
|
||||
<MenuItem value='size' primaryText={orderText(__('Size'), 'size')} />
|
||||
<MenuItem value='added' primaryText={orderText(__('Added date'), 'added')} />
|
||||
<MenuItem value='completed' primaryText={orderText(__('Completed'), 'completed')} />
|
||||
</SelectField>
|
||||
}
|
||||
|
||||
|
@ -38,7 +38,7 @@ export default class InputFilesFilter extends Component {
|
||||
return (
|
||||
<div className='filter-row row inline w100p'>
|
||||
<Checkbox
|
||||
label="Files filter"
|
||||
label={__("Files filter")}
|
||||
checked={this.state.enabled}
|
||||
style={{width: 150, display: 'flex', minWidth: 130}}
|
||||
onCheck={() => this.setState({enabled: !this.state.enabled})}
|
||||
@ -53,17 +53,17 @@ export default class InputFilesFilter extends Component {
|
||||
onChange={files => this.setState({ files })}
|
||||
/>
|
||||
<SelectField
|
||||
floatingLabelText="Size type"
|
||||
floatingLabelText={__('Size type')}
|
||||
value={this.state.filesMax}
|
||||
onChange={(event, index, value) => this.setState({filesMax: value})}
|
||||
className='filter-control-border'
|
||||
>
|
||||
<MenuItem value={10} primaryText="10 Files or less" />
|
||||
<MenuItem value={100} primaryText="100 Files or less" />
|
||||
<MenuItem value={1000} primaryText="1000 Files or less" />
|
||||
<MenuItem value={10000} primaryText="10000 Files or less" />
|
||||
<MenuItem value={100000} primaryText="100000 Files or less" />
|
||||
<MenuItem value={1000000} primaryText="1000000 Files or less" />
|
||||
<MenuItem value={10} primaryText={"10 " + __("Files or less")} />
|
||||
<MenuItem value={100} primaryText={"100 " + __("Files or less")} />
|
||||
<MenuItem value={1000} primaryText={"1000 " + __("Files or less")} />
|
||||
<MenuItem value={10000} primaryText={"10000 " + __("Files or less")} />
|
||||
<MenuItem value={100000} primaryText={"100000 " + __("Files or less")} />
|
||||
<MenuItem value={1000000} primaryText={"1000000 " + __("Files or less")} />
|
||||
</SelectField>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -38,7 +38,7 @@ export default class InputSize extends Component {
|
||||
return (
|
||||
<div className='filter-row row inline w100p'>
|
||||
<Checkbox
|
||||
label="Size filter"
|
||||
label={__('Size filter')}
|
||||
checked={this.state.enabled}
|
||||
style={{width: 150, display: 'flex', minWidth: 130}}
|
||||
onCheck={() => this.setState({enabled: !this.state.enabled})}
|
||||
@ -54,7 +54,7 @@ export default class InputSize extends Component {
|
||||
onChange={size => this.setState({ size })}
|
||||
/>
|
||||
<SelectField
|
||||
floatingLabelText="Size type max"
|
||||
floatingLabelText={__('Size type max')}
|
||||
value={this.state.maxSize}
|
||||
onChange={(event, index, value) => this.setState({maxSize: value})}
|
||||
className='filter-control-border'
|
||||
|
@ -139,13 +139,13 @@ export default class RecentTorrents extends Component {
|
||||
return (
|
||||
<List className='animated recent-torrents'>
|
||||
<Subheader className='recent-title' inset={true}>
|
||||
<FlatButton style={{marginRight: '8px'}} primary={true} label='top' labelStyle={{color: "#a4c639"}} onClick={() =>{
|
||||
<FlatButton style={{marginRight: '8px'}} primary={true} label={__('top')} labelStyle={{color: "#a4c639"}} onClick={() =>{
|
||||
window.router('/top');
|
||||
}} />
|
||||
<FlatButton style={{marginRight: '8px'}} label={!this.state.pause ? 'running' : 'stoped'} secondary={this.state.pause} primary={!this.state.pause} onClick={() =>{
|
||||
<FlatButton style={{marginRight: '8px'}} label={!this.state.pause ? __('running') : __('stoped')} secondary={this.state.pause} primary={!this.state.pause} onClick={() =>{
|
||||
this.pauseAndContinue()
|
||||
}} />
|
||||
Most recent torrents{this.displayQueue.length > 0 ? ` (and ${this.displayQueue.length} more)` : null}
|
||||
{__('Most recent torrents')}{this.displayQueue.length > 0 ? ` (${__('and')} ${this.displayQueue.length} ${__('more')})` : null}
|
||||
</Subheader>
|
||||
<Divider />
|
||||
{
|
||||
|
@ -31,18 +31,18 @@ export default class AdvancedSearchControl extends Component {
|
||||
return (
|
||||
<div className='column w100p' style={{maxWidth: 750, overflow: 'hidden', padding: '0px 18px 15px', background: 'white', borderRadius: 3}}>
|
||||
<SelectField
|
||||
floatingLabelText="Filter content type"
|
||||
floatingLabelText={__('Filter content type')}
|
||||
value={this.state.type}
|
||||
onChange={(event, index, value) => this.setState({type: value})}
|
||||
>
|
||||
<MenuItem value={undefined} primaryText="" />
|
||||
<MenuItem value='video' primaryText="Video" />
|
||||
<MenuItem value='audio' primaryText="Audio" />
|
||||
<MenuItem value='pictures' primaryText="Pictures" />
|
||||
<MenuItem value='books' primaryText="Books" />
|
||||
<MenuItem value='application' primaryText="Applications" />
|
||||
<MenuItem value='archive' primaryText="Archives" />
|
||||
<MenuItem value='disc' primaryText="Disk Images" />
|
||||
<MenuItem value='video' primaryText={__('Video')} />
|
||||
<MenuItem value='audio' primaryText={__('Audio')} />
|
||||
<MenuItem value='pictures' primaryText={__('Pictures')} />
|
||||
<MenuItem value='books' primaryText={__('Books')} />
|
||||
<MenuItem value='application' primaryText={__('Applications')} />
|
||||
<MenuItem value='archive' primaryText={__('Archives')} />
|
||||
<MenuItem value='disc' primaryText={__('Disk Images')} />
|
||||
</SelectField>
|
||||
<div className='w100p'>
|
||||
<InputSize value={this.state.size} enabled={this.state.sizeEnabled} maxSize={this.state.maxSize} onChange={({size, maxSize, enabled}) => this.setState({size, maxSize, sizeEnabled: enabled})} />
|
||||
|
@ -15,7 +15,7 @@ export default class SearchResults extends Component {
|
||||
|| (this.props.filesSearchResults && this.props.filesSearchResults.length > 0)
|
||||
?
|
||||
<div>
|
||||
<Subheader className='row center w100p' style={{paddingLeft: 0}} inset={true}><span>Search results for</span> <span style={{marginLeft: '0.4em'}}><b>{this.props.searchText}</b></span></Subheader>
|
||||
<Subheader className='row center w100p' style={{paddingLeft: 0}} inset={true}><span>{__('Search results for')}</span> <span style={{marginLeft: '0.4em'}}><b>{this.props.searchText}</b></span></Subheader>
|
||||
<div className='w100p row center' style={{marginTop: '-16px'}}>{this.props.resultSelector}</div>
|
||||
</div>
|
||||
:
|
||||
@ -36,7 +36,7 @@ export default class SearchResults extends Component {
|
||||
this.props.moreTorrentsEnabled && !this.props.moreTorrentsIndicator
|
||||
?
|
||||
<div>
|
||||
<ListItem innerDivStyle={{textAlign: 'center', padding: '1em'}} primaryText={<span>More Torrents</span>} onClick={() => {
|
||||
<ListItem innerDivStyle={{textAlign: 'center', padding: '1em'}} primaryText={<span>{__('More Torrents')}</span>} onClick={() => {
|
||||
if(this.props.onMoreTorrents)
|
||||
this.props.onMoreTorrents();
|
||||
}} />
|
||||
@ -69,7 +69,7 @@ export default class SearchResults extends Component {
|
||||
this.props.moreFilesEnabled && !this.props.moreFilesIndicator
|
||||
?
|
||||
<div>
|
||||
<ListItem innerDivStyle={{textAlign: 'center', padding: '1em'}} primaryText='More Files' onClick={() => {
|
||||
<ListItem innerDivStyle={{textAlign: 'center', padding: '1em'}} primaryText={__('More Files')} onClick={() => {
|
||||
if(this.props.onMoreFiles)
|
||||
this.props.onMoreFiles();
|
||||
}} />
|
||||
@ -125,7 +125,7 @@ export default class SearchResults extends Component {
|
||||
c-5.292-6.087-7.944-13.459-7.944-22.108C63.521,74.195,66.173,66.825,71.465,60.749z"/>
|
||||
</g>
|
||||
</svg>
|
||||
<div className='fs0-85 pad0-75' style={{color: 'grey'}}>no torrents for <b>{this.props.searchText}</b> were found</div>
|
||||
<div className='fs0-85 pad0-75' style={{color: 'grey'}}>{__('no torrents for')} <b>{this.props.searchText}</b> {__('were found')}</div>
|
||||
</div>
|
||||
:
|
||||
null
|
||||
|
@ -18,19 +18,19 @@ export default class TopPage extends Page {
|
||||
this.topTorrents = {};
|
||||
this.types = ['main', 'video', 'audio', 'books', 'pictures', 'application', 'archive']
|
||||
this.descriptions = {
|
||||
main: 'All',
|
||||
video: 'Video',
|
||||
audio: 'Audio/Music',
|
||||
books: 'Books',
|
||||
pictures: 'Pictures/Images',
|
||||
application: 'Apps/Games',
|
||||
archive: 'Archives'
|
||||
main: __('All'),
|
||||
video: __('Video'),
|
||||
audio: __('Audio/Music'),
|
||||
books: __('Books'),
|
||||
pictures: __('Pictures/Images'),
|
||||
application: __('Apps/Games'),
|
||||
archive: __('Archives')
|
||||
}
|
||||
this.times = {
|
||||
overall: 'Overall',
|
||||
hours: 'Last hour',
|
||||
week: 'Last week',
|
||||
month: 'Last month'
|
||||
overall: __('Overall'),
|
||||
hours: __('Last hour'),
|
||||
week: __('Last week'),
|
||||
month: __('Last month')
|
||||
}
|
||||
this.state = {type: 'main', time: 'overall'}
|
||||
}
|
||||
@ -157,7 +157,7 @@ export default class TopPage extends Page {
|
||||
torrents.length > 0
|
||||
&&
|
||||
<div>
|
||||
<ListItem innerDivStyle={{textAlign: 'center', padding: '1em'}} primaryText={<span>More Torrents</span>} onClick={() => {
|
||||
<ListItem innerDivStyle={{textAlign: 'center', padding: '1em'}} primaryText={<span>{__('More Torrents')}</span>} onClick={() => {
|
||||
this.loadMoreTorrents(type)
|
||||
}} />
|
||||
<Divider />
|
||||
|
@ -409,7 +409,7 @@ export default class TorrentPage extends Page {
|
||||
onClick={() => {
|
||||
window.torrentSocket.emit('downloadCancel', this.torrent.hash)
|
||||
}}
|
||||
label="Cancel download"
|
||||
label={__('Cancel download')}
|
||||
secondary={true}
|
||||
icon={<svg fill='rgb(255, 64, 129)' viewBox="0 0 18 18"><path d="M9 1C4.58 1 1 4.58 1 9s3.58 8 8 8 8-3.58 8-8-3.58-8-8-8zm4 10.87L11.87 13 9 10.13 6.13 13 5 11.87 7.87 9 5 6.13 6.13 5 9 7.87 11.87 5 13 6.13 10.13 9 13 11.87z"/></svg>}
|
||||
/>
|
||||
|
@ -283,9 +283,9 @@ export default class Torrent extends Component {
|
||||
torrent.seeders || torrent.leechers || torrent.completed
|
||||
?
|
||||
<div className='break-word fs0-85' style={{paddingTop: '0.35em'}}>
|
||||
<span style={{color: (torrent.seeders > 0 ? '#00C853' : 'grey')}}>{torrent.seeders} seeders</span>
|
||||
<span style={{color: (torrent.leechers > 0 ? '#AA00FF' : 'grey'), marginLeft: '12px'}}>{torrent.leechers} leechers</span>
|
||||
<span style={{color: (torrent.completed > 0 ? '#FF6D00' : 'grey'), marginLeft: '12px'}}>{torrent.completed} completed</span>
|
||||
<span style={{color: (torrent.seeders > 0 ? '#00C853' : 'grey')}}>{torrent.seeders} {__('seeders')}</span>
|
||||
<span style={{color: (torrent.leechers > 0 ? '#AA00FF' : 'grey'), marginLeft: '12px'}}>{torrent.leechers} {__('leechers')}</span>
|
||||
<span style={{color: (torrent.completed > 0 ? '#FF6D00' : 'grey'), marginLeft: '12px'}}>{torrent.completed} {__('completed')}</span>
|
||||
</div>
|
||||
:
|
||||
null
|
||||
|
@ -49,6 +49,96 @@
|
||||
"redirect": "redirect",
|
||||
"safe search enabled": "safe search enabled",
|
||||
"Search torrent or file": "Search torrent or file",
|
||||
"What to search?": "What to search?"
|
||||
"What to search?": "What to search?",
|
||||
"not available": "not available",
|
||||
"Sort by": "Sort by",
|
||||
"None": "None",
|
||||
"Seeders": "Seeders",
|
||||
"Name": "Name",
|
||||
"Size": "Size",
|
||||
"Added date": "Added date",
|
||||
"Completed": "Completed",
|
||||
"top": "top",
|
||||
"running": "running",
|
||||
"Most recent torrents": "Most recent torrents",
|
||||
"All": "All",
|
||||
"Video": "Video",
|
||||
"Audio/Music": "Audio/Music",
|
||||
"Books": "Books",
|
||||
"Pictures/Images": "Pictures/Images",
|
||||
"Apps/Games": "Apps/Games",
|
||||
"Archives": "Archives",
|
||||
"Overall": "Overall",
|
||||
"Last hour": "Last hour",
|
||||
"Last week": "Last week",
|
||||
"Last month": "Last month",
|
||||
"More Torrents": "More Torrents",
|
||||
"Filter content type": "Filter content type",
|
||||
"Audio": "Audio",
|
||||
"Pictures": "Pictures",
|
||||
"Applications": "Applications",
|
||||
"Disk Images": "Disk Images",
|
||||
"Size filter": "Size filter",
|
||||
"Size type max": "Size type max",
|
||||
"Files filter": "Files filter",
|
||||
"Size type": "Size type",
|
||||
"Files or less": "Files or less",
|
||||
"safe search disabled": "safe search disabled",
|
||||
"Back to main page": "Back to main page",
|
||||
"Max files per torrent": "Max files per torrent",
|
||||
"current": "current",
|
||||
"Max files": "Max files",
|
||||
"Disabled": "Disabled",
|
||||
"Torrent name regular extension filtering": "Torrent name regular extension filtering",
|
||||
"Examples": "Examples",
|
||||
"Russian + English only (With symbols)": "Russian + English only (With symbols)",
|
||||
"English only (With symbols)": "English only (With symbols)",
|
||||
"Ignore badword": "Ignore badword",
|
||||
"Negative regular extension filtering": "Negative regular extension filtering",
|
||||
"clean string means disabled": "clean string means disabled",
|
||||
"Adult filter": "Adult filter",
|
||||
"Check torrents": "Check torrents",
|
||||
"Clean torrents": "Clean torrents",
|
||||
"Save Settings": "Save Settings",
|
||||
"Enabled network scanning": "Enabled network scanning",
|
||||
"Scanning port": "Scanning port",
|
||||
"Port": "Port",
|
||||
"This field is required": "This field is required",
|
||||
"For current work TCP and UDP ports must be fully open and forward in case of router usage": "For current work TCP and UDP ports must be fully open and forward in case of router usage",
|
||||
"Trackers responce port": "Trackers responce port",
|
||||
"For current work UDP port must be fully open and forward in case of router usage": "For current work UDP port must be fully open and forward in case of router usage",
|
||||
"Enabled UPnP": "Enabled UPnP",
|
||||
"Collection directory": "Collection directory",
|
||||
"Db path": "Db path",
|
||||
"Browse": "Browse",
|
||||
"Download torrents directory": "Download torrents directory",
|
||||
"Download path": "Download path",
|
||||
"P2P Rats network settings": "P2P Rats network settings",
|
||||
"Enabled p2p search": "Enabled p2p search",
|
||||
"Enabled bootstrap peers": "Enabled bootstrap peers",
|
||||
"Use extrnral bootstrap nodes to get p2p peers when network setted wrong or need external source": "Use extrnral bootstrap nodes to get p2p peers when network setted wrong or need external source",
|
||||
"Max peers limit": "Max peers limit",
|
||||
"P2P torrents replication": "P2P torrents replication",
|
||||
"Enable torrents replication from another rats clients. Dont recomended if torrent scanner works correct": "Enable torrents replication from another rats clients. Dont recomended if torrent scanner works correct",
|
||||
"Torrent network scanner settings": "Torrent network scanner settings",
|
||||
"Scanner walk speed": "Scanner walk speed",
|
||||
"affected after program reload": "affected after program reload",
|
||||
"Low value": "Low value",
|
||||
"fast initial scanning and high cpu usage": "fast initial scanning and high cpu usage",
|
||||
"High Value": "High Value",
|
||||
"low cpu usage but very slow scanning": "low cpu usage but very slow scanning",
|
||||
"Good value between": "Good value between",
|
||||
"Defaul value": "Defaul value",
|
||||
"Nodes usage": "Nodes usage",
|
||||
"Low Value": "Low Value",
|
||||
"very low usage of nodes, low network traffic, slow torrent scanning": "very low usage of nodes, low network traffic, slow torrent scanning",
|
||||
"High value": "High value",
|
||||
"high traffic, fast scanning, high routers usage": "high traffic, fast scanning, high routers usage",
|
||||
"Recomended value between": "Recomended value between",
|
||||
"Ignore this option": "Ignore this option",
|
||||
"no limit": "no limit",
|
||||
"Reduce network packages": "Reduce network packages",
|
||||
"ignore more usless network packages, lower traffic and routers usage": "ignore more usless network packages, lower traffic and routers usage",
|
||||
"high traffic and router usage in prospect": "high traffic and router usage in prospect"
|
||||
}
|
||||
}
|
@ -49,6 +49,96 @@
|
||||
"redirect": "переадресация",
|
||||
"safe search enabled": "безопасный поиск включен",
|
||||
"Search torrent or file": "Искать торрент или файл",
|
||||
"What to search?": "Что искать?"
|
||||
"What to search?": "Что искать?",
|
||||
"not available": "недоступное",
|
||||
"Sort by": "Сортировать по",
|
||||
"None": "Нету",
|
||||
"Seeders": "Сидеры",
|
||||
"Name": "Имя",
|
||||
"Size": "Размер",
|
||||
"Added date": "Дата добавления",
|
||||
"Completed": "Завершено",
|
||||
"top": "топ",
|
||||
"running": "запущено",
|
||||
"Most recent torrents": "Самые актуальные торренты",
|
||||
"All": "Все",
|
||||
"Video": "Видер",
|
||||
"Audio/Music": "Аудио/Музыка",
|
||||
"Books": "Книги",
|
||||
"Pictures/Images": "Картинки/Изображения",
|
||||
"Apps/Games": "Приложения/Игры",
|
||||
"Archives": "Архивы",
|
||||
"Overall": "За все время",
|
||||
"Last hour": "За последний час",
|
||||
"Last week": "За последнюю неделю",
|
||||
"Last month": "За последний месяц",
|
||||
"More Torrents": "Больше торрентов",
|
||||
"Filter content type": "Фильтровать по типу",
|
||||
"Audio": "Аудио",
|
||||
"Pictures": "Кантинки",
|
||||
"Applications": "Приложения",
|
||||
"Disk Images": "Дисковые образы",
|
||||
"Size filter": "Фильтр по размеру",
|
||||
"Size type max": "Максимальный размер (тип)",
|
||||
"Files filter": "Фильтр файлов",
|
||||
"Size type": "Тип размера",
|
||||
"Files or less": "Файлов или меньше",
|
||||
"safe search disabled": "безопасный поиск отключен",
|
||||
"Back to main page": "Вернуться на главную страницу",
|
||||
"Max files per torrent": "Максимальное количество файлов на торрент",
|
||||
"current": "текущее",
|
||||
"Max files": "Максимально файлов",
|
||||
"Disabled": "Отключено",
|
||||
"Torrent name regular extension filtering": "Фильтр имени торрентов по регулярному выражению",
|
||||
"Examples": "Примеры",
|
||||
"Russian + English only (With symbols)": "Русский + Английский (С символами)",
|
||||
"English only (With symbols)": "Только Английский (С символами)",
|
||||
"Ignore badword": "Игнорировать плохое слово",
|
||||
"Negative regular extension filtering": "Фильтрация по негативному регулярному выражению",
|
||||
"clean string means disabled": "пустая строка означает что отключено",
|
||||
"Adult filter": "Фильтр 18+",
|
||||
"Check torrents": "Проверить торренты",
|
||||
"Clean torrents": "Очистить торренты",
|
||||
"Save Settings": "Сохранить торренты",
|
||||
"Enabled network scanning": "Включить сканер сети",
|
||||
"Scanning port": "Сканировать порт",
|
||||
"Port": "Порт",
|
||||
"This field is required": "Это необходимое поле",
|
||||
"For current work TCP and UDP ports must be fully open and forward in case of router usage": "Для нормальной работы TCP и UDP порты должны быть полностью открыты и проброшенны, в случае использования роутера",
|
||||
"Trackers responce port": "Порт получение ответов от трекеров",
|
||||
"For current work UDP port must be fully open and forward in case of router usage": "Дня нормальной работы UDP порт должен быть полностью открыт и проброшен, в случае использования роутера.",
|
||||
"Enabled UPnP": "Включить UPnP",
|
||||
"Collection directory": "Директория коллекции",
|
||||
"Db path": "Путь базы данных",
|
||||
"Browse": "Выбрать",
|
||||
"Download torrents directory": "Папка скачки торрентов",
|
||||
"Download path": "Папка скачки",
|
||||
"P2P Rats network settings": "P2P Крысиные настройки сети",
|
||||
"Enabled p2p search": "Включить p2p поиск",
|
||||
"Enabled bootstrap peers": "Включить начальные узлы",
|
||||
"Use extrnral bootstrap nodes to get p2p peers when network setted wrong or need external source": "Использовать дополнительные источники для получения пиров, когда сеть настроена неверна, или нужен дополнительный источник",
|
||||
"Max peers limit": "Максимальное количество пиров",
|
||||
"P2P torrents replication": "P2P репликация торрентов",
|
||||
"Enable torrents replication from another rats clients. Dont recomended if torrent scanner works correct": "Включить репликацию торрентов из других крысиных клиентов. Не рекомендуется если сканер торрентов работает корректно",
|
||||
"Torrent network scanner settings": "Настройка сканера торрентов",
|
||||
"Scanner walk speed": "Скорость прохода",
|
||||
"affected after program reload": "применяется после перезагрузки программы",
|
||||
"Low value": "Маленькое значение",
|
||||
"fast initial scanning and high cpu usage": "быстрое начало сканирования и высокая нагрузка на cpu",
|
||||
"High Value": "Высокое значение",
|
||||
"low cpu usage but very slow scanning": "маленькое использование cpu, но медленное сканирование",
|
||||
"Good value between": "Хорошо значание между",
|
||||
"Defaul value": "Значение по умолчанию",
|
||||
"Nodes usage": "Использование узлов",
|
||||
"Low Value": "Маленькое значание",
|
||||
"very low usage of nodes, low network traffic, slow torrent scanning": "маленькое использование узлов, маленький сетевой траффик, медленное сканирование сети",
|
||||
"High value": "Высокое значение",
|
||||
"high traffic, fast scanning, high routers usage": "большой траффик, быстроение сканирование, большое использование роутеров",
|
||||
"Recomended value between": "Рекомендуемое значение между",
|
||||
"Ignore this option": "Игнорировать эту опцию",
|
||||
"no limit": "без ограничений",
|
||||
"Reduce network packages": "Сократить количество сетевых пакетов",
|
||||
"ignore more usless network packages, lower traffic and routers usage": "игнорировать больше сетевых пакетов, меньше трафик и использование роутеров",
|
||||
"high traffic and router usage in prospect": "большой траффик и выскокая нагрузка на роутер в перспективе"
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user