UNPKG

enketo-core

Version:

Extensible Enketo form engine

113 lines (106 loc) 3.49 kB
/** * Placeholder module for translator. It is meant to be overwritten by a translator used in your app. * * @module fake-translator */ // This is NOT a complete list of all enketo-core UI strings. Use a parser to find // all strings. E.g. https://github.com/i18next/i18next-parser const SOURCE_STRINGS = { constraint: { invalid: 'Value not allowed', required: 'This field is required', }, filepicker: { placeholder: 'Click here to upload file. (< __maxSize__)', notFound: 'File __existing__ could not be found (leave unchanged if already submitted and you want to preserve it).', waitingForPermissions: 'Waiting for user permissions.', resetWarning: 'This will remove the __item__. Are you sure you want to do this?', toolargeerror: 'File too large (> __maxSize__)', file: 'file', }, drawwidget: { drawing: 'drawing', signature: 'signature', annotation: 'file and drawing', }, form: { required: 'required', }, geopicker: { accuracy: 'accuracy (m)', altitude: 'altitude (m)', closepolygon: 'close polygon', kmlcoords: 'KML coordinates', kmlpaste: 'paste KML coordinates here', latitude: 'latitude (x.y °)', longitude: 'longitude (x.y °)', points: 'points', searchPlaceholder: 'search for place or address', removePoint: 'This will completely remove the current geopoint from the list of geopoints and cannot be undone. Are you sure you want to do this?', }, selectpicker: { noneselected: 'none selected', numberselected: '__number__ selected', }, imagemap: { svgNotFound: 'SVG image could not be found', }, rankwidget: { tapstart: 'Tap to start', clickstart: 'Click to start', }, widget: { comment: { update: 'Update', }, }, alert: { gotonotfound: { msg: "Failed to find question '__path__' in form. Is it a valid path?", }, valuehasspaces: { multiple: 'Select multiple question has an illegal value "__value__" that contains a space.', }, }, confirm: { repeatremove: { heading: 'Delete this group of responses?', msg: 'This action is irreversible. Are you sure you want to proceed?', }, }, }; /** * Add keys from XSL stylesheets manually so i18next-parser will detect them. * * t('constraint.invalid'); * t('constraint.required'); * t('hint.guidance.details'); */ /** * Meant to be replaced by a real translator in the app that consumes enketo-core * * @static * @param {string} key - Translation key * @param {object} [options] - Translation options object * @return {string} Translation output */ function t(key, options) { let str = ''; let target = SOURCE_STRINGS; // crude string getter key.split('.').forEach((part) => { target = target ? target[part] : ''; str = target; }); // crude interpolator options = options || {}; str = str.replace(/__([^_]+)__/, (match, p1) => options[p1]); // Enable line below to switch to fake Arabic, very useful for testing RTL // var AR = 'العربية '; return str.split( '' ).map( function( char, i ) { return AR[ i % AR.length ];} ).join( '' ); return str; } export { t };