在模块中使用 shiny.i18n 翻译闪亮的应用程序?
Translate shiny app using shiny.i18n in modules?
问题: 我想将模块化闪亮应用程序的一部分翻译成德语或英语。我想使用的包是 shiny.i18n
,它似乎可以在非模块化应用程序中工作,并且看起来很容易处理。但是,在下面的模块化闪亮玩具示例中,翻译不起作用。为什么会发生这种情况有什么建议吗?
Server/UI:
library(shiny)
library(shinydashboard)
library(DT)
library(data.table)
library(shiny.i18n)
i18n <- Translator$new(translation_json_path = "translation.json")
i18n$set_translation_language("en")
source("displayTable_module.R")
ui <- fluidPage(
table_UI("display_table")
)
server <- function(input, output) {
callModule(table_server,
"display_table"
)
}
shinyApp(ui = ui, server = server)
displayTable_module
模块:
## displayTable_module.R
table_UI <- function(id){
ns <- NS(id)
shinydashboard::box(i18n$t("Daten Visualisieren"),
# "Test header",
DTOutput(ns("table"))
)
}
table_server <- function(input, output, session){
output$table <- renderDT(datatable(mtcars))
}
JSON-翻译映射文件(translation.json
):
{
"languages": ["en", "ger"],
"translation": [
{
"en": "Daten Visualisieren",
"ger": "Visualize your data"
}
]
}
您可以将 i18n
对象作为附加参数从 ui / 服务器函数传递过来:
displayTable_module.R
table_UI <- function(id, i18n){
ns <- NS(id)
shinydashboard::box(i18n$t("Daten Visualisieren"),
# "Test header",
DTOutput(ns("table"))
)
}
app.r
ui <- fluidPage(
table_UI("display_table", i18n = i18n)
)
问题: 我想将模块化闪亮应用程序的一部分翻译成德语或英语。我想使用的包是 shiny.i18n
,它似乎可以在非模块化应用程序中工作,并且看起来很容易处理。但是,在下面的模块化闪亮玩具示例中,翻译不起作用。为什么会发生这种情况有什么建议吗?
Server/UI:
library(shiny)
library(shinydashboard)
library(DT)
library(data.table)
library(shiny.i18n)
i18n <- Translator$new(translation_json_path = "translation.json")
i18n$set_translation_language("en")
source("displayTable_module.R")
ui <- fluidPage(
table_UI("display_table")
)
server <- function(input, output) {
callModule(table_server,
"display_table"
)
}
shinyApp(ui = ui, server = server)
displayTable_module
模块:
## displayTable_module.R
table_UI <- function(id){
ns <- NS(id)
shinydashboard::box(i18n$t("Daten Visualisieren"),
# "Test header",
DTOutput(ns("table"))
)
}
table_server <- function(input, output, session){
output$table <- renderDT(datatable(mtcars))
}
JSON-翻译映射文件(translation.json
):
{
"languages": ["en", "ger"],
"translation": [
{
"en": "Daten Visualisieren",
"ger": "Visualize your data"
}
]
}
您可以将 i18n
对象作为附加参数从 ui / 服务器函数传递过来:
displayTable_module.R
table_UI <- function(id, i18n){
ns <- NS(id)
shinydashboard::box(i18n$t("Daten Visualisieren"),
# "Test header",
DTOutput(ns("table"))
)
}
app.r
ui <- fluidPage(
table_UI("display_table", i18n = i18n)
)