【问题标题】:Shiny.i18n text decorationShiny.i18n 文字装饰
【发布时间】:2022-06-11 23:34:54
【问题描述】:

我正在使用 Shiny.i18n 翻译我的 Shiny 应用程序中的所有文本,使用实时方法。 我的应用中有一个真实的长文本,我希望能够翻译它,但同时还要将该文本中的单个单词加粗。

我知道理论上我可以单独编写和翻译每个单词,然后将其加粗。但我想找到一个更优雅的选项,让我在更大的上下文中将单词加粗。

这是我的问题的重复。

闪亮的应用程序

library(shiny)
library(shiny.i18n)
library(ggplot2)

i18n <- Translator$new(translation_json_path='translation.json')
i18n$set_translation_language('de')



ui <- fluidPage(
  shiny.i18n::usei18n(i18n),
  h1(i18n$t("Welt")),
  tags$div(
    style='float: right;',
    selectInput(
      inputId='selected_language',
      label=i18n$t('Change language'),
      choices = i18n$get_languages(),
      selected = i18n$get_key_translation()
    )
  ),
  h1(i18n$t("<strong>Hallo</strong> Welt"), windowTitle=NULL),
  
  )


server <- function(input, output, session) {
  observeEvent(input$selected_language, {
    update_lang(session, input$selected_language)
  })
  
}

# Run the application 
shinyApp(ui = ui, server = server)

我的翻译保存在 json 中,例如

   "languages":[
      "de",
      "en"
   ],
   "translation":[
      {
         "de":"<strong>Hallo</strong> Welt",
         "en":"<strong>Hello</strong> World"
      },
      {
         "de":"Sprache Aendern:",
         "en":"Change language:"
      },
      {
        "de":"Welt",
        "en":"World"
      }
   ]
}

如果我现在尝试更改语言,则只有 "World" 会被翻译。 你好 Welt”根本没有翻译。我不明白为什么。

如果我添加h1(i18n$t(**HTML(**"&lt;strong&gt;Hallo&lt;/strong&gt; Welt"))“Hallo” 确实变粗了,但句子仍未翻译。

我也尝试过h1(HTML(i18n$t("&lt;strong&gt;Hallo&lt;/strong&gt; Welt")),但这会引发以下错误消息:

FUN(X[[i]], ...) 中的错误:参数不是字符向量

非常感谢您的任何建议或想法

【问题讨论】:

    标签: shiny internationalization translation


    【解决方案1】:

    首先,Full Reproducible Example 将在未来停止以获得正确的答案,因为您不需要将一些他们的时间用于您的的人> 首先创建一个运行示例的问题。

    关于您的问题。您需要告诉shiny 将文本呈现为HTML。请参阅下面示例中HTML 的用法。

    translation.json

    {
       "languages":[
          "de",
          "en"
       ],
       "translation":[
          {
             "de":"<strong>Hallo</strong> Welt",
             "en":"<strong>Hello</strong> World"
          },
          {
             "de":"Sprache ändern:",
             "en":"Change language:"
          }
       ]
    }
    

    app.R

    library(shiny)
    library(shiny.i18n)
    translator <- Translator$new(translation_json_path = "translation.json")
    
    ui <- fluidPage(
       titlePanel('Use HTML in Translation'),
       uiOutput('page_content')
    )
    
    server <- function(input, output, session) {
       i18n <- reactive({
          selected <- input$selected_language
          if (length(selected) > 0 && selected %in% translator$get_languages()) {
             translator$set_translation_language(selected)
          }
          translator
       })
       
       output$page_content <- renderUI({
          tagList(
             sidebarLayout(
                sidebarPanel(
                   selectInput('selected_language',
                               i18n()$t("Sprache ändern:"),
                               choices = translator$get_languages(),
                               selected = input$selected_language)
                ),
                mainPanel(
                   ## note the use of `HTML` here
                   p(HTML(i18n()$t("<strong>Hallo</strong> Welt"))) 
                )
             )
          )
       })
    }
    
    shinyApp(ui = ui, server = server)
    
    

    截图

    【讨论】:

    • 非常感谢您的帮助!我现在添加了一个repex。不幸的是,您的解决方案对我不起作用。我认为这是因为我翻译我的应用程序有点不同,但我不确定。您还有其他建议/想法吗?
    猜你喜欢
    • 1970-01-01
    • 2011-12-28
    • 2018-02-21
    • 1970-01-01
    • 2020-02-17
    • 2012-08-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多