Commit b7f01f2b authored by Phil Hughes's avatar Phil Hughes

Moved all the text translation manipulation into the locale index file

Commented the translation methods
parent ee65de48
import Jed from 'jed'; import Jed from 'jed';
/**
This is required to require all the translation folders in the current directory
this saves us having to do this manually & keep up to date with new languages
**/
function requireAll(requireContext) { return requireContext.keys().map(requireContext); } function requireAll(requireContext) { return requireContext.keys().map(requireContext); }
const allLocales = requireAll(require.context('./', true, /^(?!.*(?:index.js$)).*\.js$/)); const allLocales = requireAll(require.context('./', true, /^(?!.*(?:index.js$)).*\.js$/));
...@@ -16,11 +20,47 @@ let lang = document.querySelector('html').getAttribute('lang') || 'en'; ...@@ -16,11 +20,47 @@ let lang = document.querySelector('html').getAttribute('lang') || 'en';
lang = lang.replace(/-/g, '_'); lang = lang.replace(/-/g, '_');
const locale = new Jed(locales[lang]); const locale = new Jed(locales[lang]);
/**
Translates `text`
@param text The text to be translated
@returns {String} The translated text
**/
const gettext = locale.gettext.bind(locale); const gettext = locale.gettext.bind(locale);
const ngettext = locale.ngettext.bind(locale);
const pgettext = (context, key) => { /**
const joinedKey = [context, key].join('|'); Translate the text with a number
return gettext(joinedKey).split('|').pop(); if the number is more than 1 it will use the `pluralText` translation.
This method allows for contexts, see below re. contexts
@param text Singular text to translate (eg. '%d day')
@param pluralText Plural text to translate (eg. '%d days')
@param count Number to decide which translation to use (eg. 2)
@returns {String} Translated text with the number replaced (eg. '2 days')
**/
const ngettext = (text, pluralText, count) => {
const translated = locale.ngettext(text, pluralText, count).replace(/%d/g, count).split('|');
return translated[translated.length - 1];
};
/**
Translate context based text
Either pass in the context translation like `Context|Text to translate`
or allow for dynamic text by doing passing in the context first & then the text to translate
@param keyOrContext Can be either the key to translate including the context
(eg. 'Context|Text') or just the context for the translation
(eg. 'Context')
@param key Is the dynamic variable you want to be translated
@returns {String} Translated context based text
**/
const pgettext = (keyOrContext, key) => {
const normalizedKey = key ? `${keyOrContext}|${key}` : keyOrContext;
const translated = gettext(normalizedKey).split('|');
return translated[translated.length - 1];
}; };
export { lang }; export { lang };
......
import { import {
__, __,
n__, n__,
s__,
} from '../locale'; } from '../locale';
export default (Vue) => { export default (Vue) => {
Vue.mixin({ Vue.mixin({
methods: { methods: {
/**
Translates `text`
@param text The text to be translated
@returns {String} The translated text
**/
__(text) { return __(text); }, __(text) { return __(text); },
n__(text, pluralText, count) { /**
const translated = n__(text, pluralText, count).replace(/%d/g, count).split('|'); Translate the text with a number
return translated[translated.length - 1]; if the number is more than 1 it will use the `pluralText` translation.
}, This method allows for contexts, see below re. contexts
s__(keyOrContext, key) {
const normalizedKey = key ? `${keyOrContext}|${key}` : keyOrContext; @param text Singular text to translate (eg. '%d day')
// eslint-disable-next-line no-underscore-dangle @param pluralText Plural text to translate (eg. '%d days')
const translated = this.__(normalizedKey).split('|'); @param count Number to decide which translation to use (eg. 2)
@returns {String} Translated text with the number replaced (eg. '2 days')
**/
n__(text, pluralText, count) { return n__(text, pluralText, count); },
/**
Translate context based text
Either pass in the context translation like `Context|Text to translate`
or allow for dynamic text by doing passing in the context first & then the text to translate
return translated[translated.length - 1]; @param keyOrContext Can be either the key to translate including the context
}, (eg. 'Context|Text') or just the context for the translation
(eg. 'Context')
@param key Is the dynamic variable you want to be translated
@returns {String} Translated context based text
**/
s__(keyOrContext, key) { return s__(keyOrContext, key); },
}, },
}); });
}; };
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment