i18next.com
Version:
i18next website
124 lines (109 loc) • 3.61 kB
JSX
import React from 'react';
import DocumentTitle from 'react-document-title';
import Markdown from 'react-remarkable';
import isoLangs from './_isoLangs';
import PluralResolver from 'i18next/dist/commonjs/PluralResolver';
import LanguageUtils from 'i18next/dist/commonjs/LanguageUtils';
var pluralResolver = new PluralResolver(new LanguageUtils({ whitelist: false }));
function PluralItem(props) {
var names = isoLangs[props.name];
var fullName = names ? names.name : 'unknown';
var nativeName = names ? names.nativeName: 'unknown';
var version = props.version;
return (
<tr title={props.rule.plurals.toString()}>
<td>{props.name}</td>
<td>{fullName + ' (' + nativeName + ')'}</td>
<td>
{
props.rule.numbers.length
}
</td>
<td>
{
props.rule.numbers.length === 2 ? 'key, key_plural' : props.rule.numbers.reduce(function(red, n, i) {
if (version === 'v3') {
var res = red + 'key_' + i;
if (i < props.rule.numbers.length - 1) res = res + ', ';
return res;
} else if (version === 'v2'){
var res = red + 'key_' + props.rule.numbers[i];
if (i < props.rule.numbers.length - 1) res = res + ', ';
return res;
} else {
var res = red;
var nr = props.rule.numbers[i];
if (nr === 1) {
res = res + 'key';
} else {
res = res + 'key_plural_' + props.rule.numbers[i];
}
if (i < props.rule.numbers.length - 1) res = res + ', ';
return res;
}
}, '')
}
</td>
</tr>
);
}
module.exports = React.createClass({
statics: {
metadata: function() {
return {
order: 6,
title: "Plural Suffixes"
};
}
},
componentWillMount: function() {
this.pluralKeys = Object.keys(pluralResolver.rules).sort();
},
getInitialState: function() {
return {
version: 'v3'
};
},
setV1: function() {
this.setState({ version: 'v1' });
},
setV2: function() {
this.setState({ version: 'v2' });
},
setV3: function() {
this.setState({ version: 'v3' });
},
render: function() {
var version = this.state.version;
return (
<DocumentTitle title={`${module.exports.metadata().title} | ${this.props.config.siteTitle}`}>
<div className="optionstable">
<h2><a href='#plurals'>Plural Suffixes</a></h2>
<p>Hover a row to see the underlaying function.</p>
<div style={{ textAlign: 'right', marginBottom: 20 }}>
<a onClick={this.setV3} style={{ cursor: 'pointer', fontWeight: version === 'v3' ? 700 : 400 }}>show for v3.x.x</a>
<a onClick={this.setV2} style={{ cursor: 'pointer', fontWeight: version === 'v2' ? 700 : 400, marginLeft: 40 }}>show for v2.x.x</a>
<a onClick={this.setV1} style={{ cursor: 'pointer', fontWeight: version === 'v1' ? 700 : 400, marginLeft: 40 }}>show for v1.x.x</a>
</div>
<table>
<thead>
<tr>
<th>lng</th>
<th>name</th>
<th>pluralforms</th>
<th>suffixes</th>
</tr>
</thead>
<tbody>
{
this.pluralKeys.map(function(key, i) {
return <PluralItem key={key} name={key} rule={pluralResolver.rules[key]} version={version} />
})
}
</tbody>
</table>
</div>
</DocumentTitle>
);
}
});