2017-11-24 8 views
0

私は光沢のあるアプリケーションを持っています。これは、いくつかのRenderTextとActionButtonを使って複数の言語間でテキストを翻訳する機能があり、言語を切り替えることができます。updateInputSliderでフォーマットを更新するための非標準評価:bug?

library(shiny) 
trads = list(text3=list("text3 in language 1", "text in other language"), 
      titl3=list("widget label in language 1", "widget label in other language")) 

ui <- fluidPage(
    actionButton("language",label="language", icon=icon("flag")), 
    htmlOutput("text3", container = tags$h3), 
    sliderInput("slider1", label=h2("slider1"), 0, 10, 5) 
) 

server <- function(input, output, session) { 


    tr <- function(text){sapply(text, function(s) trads[[s]][[input$language%%2+1]], USE.NAMES=FALSE)} 

    output$text3 = renderText({tr("text3")}) 

    observeEvent(input$language, { 
      updateSliderInput(session, "slider1", label=tr("titl3")) 
    }) 

} 

shinyApp(ui, server) 

それは私のスライダーラベルがhtmlタグh3()で最初にフォーマットされたことを除いて正常に動作し、私はupdatesliderinputを使用する場合、私はこのタグを失うと、それはプレーンテキストに戻ります: はここに私のアプリです。 paste0、またはevalという別の構文を使用して翻訳にタグを追加しようとしましたが、実行する代わりにペーストの結果をテキストに印刷したり、エラーを表示したりします。 フォーマットをキープしながら翻訳するアイデアはありますか?おかげ

注:私は1つのテキストは、URLリンクを含むと同じ問題...それは本当にあなたがここにupdateSliderInputにバグを発見した縫い目

+0

'label = h3(tr(" titl3 "))'で試したことがありますか? –

+0

私はちょうど、翻訳の代わりに "[object Object]"を表示しようとしました:-( – agenis

+0

Ok 'label = h3(trads [[" titl3 "] [[input $ language %% 2 + 1]]) ' –

答えて

2

を持っています。純粋な文字列とHTMLタグは処理できません。周りの仕事は私があなたのUI

tags$head(
    tags$style(
     'label[for = "slider1"] { 
    color: red; 
    font-size: 20px; 
    }' 
    ) 
) 

の先頭に次のようなものを追加するだけで、常に、あなたが好きな今まで何にCSSを変更する(多分H2タグのCSSルールをコピー)とすることをお勧めいたしますと同じようにラベルパラメータに文字列を渡します。このように、スタイリングは常に同じままです。

私の完全なコード

library(shiny) 
trads = list(text3=list("text3 in language 1", "text in other language"), 
      titl3=list("widget label in language 1", "widget label in other language")) 

ui <- fluidPage(
    tags$head(
    tags$style(
     'label[for = "slider1"] { 
    color: red; 
    font-size: 20px; 
    }' 
    ) 
), 
    actionButton("language",label="language", icon=icon("flag")), 
    htmlOutput("text3", container = tags$h3), 
    sliderInput("slider1", label="slider1", 0, 10, 5) 

) 

server <- function(input, output, session) { 


    tr <- function(text){sapply(text, function(s) trads[[s]][[input$language%%2+1]], USE.NAMES=FALSE)} 

    output$text3 = renderText({tr("text3")}) 

    observeEvent(input$language, { 
    updateSliderInput(session, "slider1", label=tr("titl3")) 
    }) 

} 

shinyApp(ui, server) 

は、このことができます願っています!

+0

'スタイル 'のアイデアをありがとう、それは素晴らしいです! – agenis

+0

ちょうど1つの質問:私はすでにグローバルスタイルを定義してCSSスタイルシートを持っている場合はどうなりますか?これはデフォルトスタイルをオーバーライドするでしょうか? – agenis

+0

このルールは上書きされますしかし、私はCSSの専門家ではありません。 –

関連する問題