在模块中使用 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)
)