mirror of
https://github.com/Prominence/grails-translations-plugin.git
synced 2026-01-09 10:56:41 +03:00
96 lines
2.9 KiB
Groovy
96 lines
2.9 KiB
Groovy
package by.prominence.translations
|
|
|
|
import java.util.zip.ZipEntry
|
|
import java.util.zip.ZipOutputStream
|
|
|
|
class TranslationsManagementController {
|
|
|
|
def bundleService
|
|
|
|
def index() {
|
|
|
|
render view: 'index', model: [bundles: bundleService.getBundles()]
|
|
}
|
|
|
|
def edit() {
|
|
|
|
if (!params.bundleName) {
|
|
redirect action: 'index'
|
|
return
|
|
}
|
|
|
|
Bundle bundle = bundleService.findBundleByName(params.bundleName as String)
|
|
|
|
if (!bundle) {
|
|
render view: 'index', model: [message: g.message(code: 'plugin.translations.error.bundleNotFound', args: [params.bundleName as String])]
|
|
return
|
|
}
|
|
|
|
render view: 'edit', model: [bundle: bundle]
|
|
}
|
|
|
|
def saveFile() {
|
|
|
|
Bundle bundle = bundleService.findBundleByName(params.bundleName as String)
|
|
Language language = bundle.languages.find { Language lang ->
|
|
lang.languageTag == params.lang
|
|
}
|
|
|
|
params.each { String key, value ->
|
|
if (key.startsWith('translations.')) {
|
|
key = key.substring(key.indexOf('.') + 1)
|
|
language.translations."${key}" = value
|
|
}
|
|
}
|
|
|
|
language.languageFile.newWriter().withWriter { w ->
|
|
language.translations.each { key, value ->
|
|
w << ("${key} = ${value}\n")
|
|
}
|
|
}
|
|
|
|
if (params.bundleName) {
|
|
redirect action: 'edit', model: [bundleName: params.bundleName]
|
|
return
|
|
}
|
|
|
|
redirect action: 'index'
|
|
}
|
|
|
|
def export() {
|
|
|
|
if (params.bundleName) {
|
|
|
|
Bundle bundle = bundleService.findBundleByName(params.bundleName)
|
|
|
|
if (params.langTag) {
|
|
File exportFile = bundle.languages.find { lang ->
|
|
lang.languageTag == params.langTag
|
|
}?.languageFile
|
|
|
|
if (exportFile && exportFile.exists()) {
|
|
response.setHeader "Content-disposition", "attachment; filename=${exportFile.name}"
|
|
response.contentType = 'text/plain'
|
|
response.contentLength = exportFile.size()
|
|
response.outputStream << exportFile.bytes
|
|
|
|
}
|
|
} else {
|
|
response.contentType = 'aplication/octet-stream'
|
|
response.setHeader('Content-disposition', "attachment; filename=\"${bundle.name}.zip\"")
|
|
|
|
ZipOutputStream zipOutputStream = new ZipOutputStream(response.outputStream)
|
|
bundle.languages.each { lang ->
|
|
ZipEntry language = new ZipEntry(lang.languageFile.name)
|
|
zipOutputStream.putNextEntry(language)
|
|
zipOutputStream.write(lang.languageFile.bytes)
|
|
}
|
|
zipOutputStream.close()
|
|
}
|
|
} else {
|
|
redirect action: 'index'
|
|
}
|
|
}
|
|
|
|
}
|