44 lines
934 B
JavaScript
44 lines
934 B
JavaScript
|
'use strict'
|
||
|
|
||
|
module.exports = stringify
|
||
|
|
||
|
// Compile a language schema to a BCP 47 language tag.
|
||
|
function stringify(schema) {
|
||
|
var fields = schema || {}
|
||
|
var result = []
|
||
|
var values
|
||
|
var index
|
||
|
var value
|
||
|
|
||
|
if (fields.irregular || fields.regular) {
|
||
|
return fields.irregular || fields.regular
|
||
|
}
|
||
|
|
||
|
if (fields.language) {
|
||
|
result = result.concat(
|
||
|
fields.language,
|
||
|
fields.extendedLanguageSubtags || [],
|
||
|
fields.script || [],
|
||
|
fields.region || [],
|
||
|
fields.variants || []
|
||
|
)
|
||
|
|
||
|
values = fields.extensions || []
|
||
|
index = -1
|
||
|
|
||
|
while (++index < values.length) {
|
||
|
value = values[index]
|
||
|
|
||
|
if (value.singleton && value.extensions && value.extensions.length) {
|
||
|
result = result.concat(value.singleton, value.extensions)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (fields.privateuse && fields.privateuse.length) {
|
||
|
result = result.concat('x', fields.privateuse)
|
||
|
}
|
||
|
|
||
|
return result.join('-')
|
||
|
}
|