1

レールとエンコーディングについて多くの質問があることは知っていますが、この特定の質問については何も見つかりませんでした。

rails 3.1.3を使用して実行しているRubyonRailsアプリケーションがありますJruby 1.6.7。私たちは英語とフランス語の両方をサポートしています-そしてI18nこれを達成するためにlibrary/gemを使用しています。

翻訳ファイルのパーツの例:

#---- config/locales/en.yml ----
en:
  button_label_verify: "Verify"

#---- config/locales/fr.yml ----
fr:
  button_label_verify: "Vérifier"

場合によっては、次のエンコードエラーが発生します。

Internal Server Error: Encoding::CompatibilityError incompatible character encodings: UTF-8 and ASCII-8BIT

ケース1:

#---- app/views/_view_page.html.erb ----
.....
<h3><%= get_button_label() %></h3>
....

#---- app/helpers/page_helper.rb ----
def get_button_label
    return I18n.t(:button_label_verify)
end

これは機能します-エンコードエラーはなく、フランス語と英語の間の翻訳は問題なく機能します。

ケース2:

#---- app/views/_view_page.html.erb ----
.....
<h3><%= get_button_label() %></h3>
....

#---- app/helpers/page_helper.rb ----
def get_button_label
    return "#{I18n.t(:button_label_verify)}"
end

ただし、これは機能しません。唯一の違いは、返される値には、次のようなものではなく、文字列に計算されたコードを含む文字列が含まれることです。

return "string " + I18n.t(:button_label_verify)

注:上記でもエラーは発生しません。エンコードの問題は、計算されたI18n変換が引用符で囲まれている場合にのみ発生ます。

ケース3:

#---- app/views/_view_page.html.erb ----
.....
<h3><%= "#{I18n.t(:button_label_verify)}" %></h3>
....

これはエラーを引き起こしません...したがって、問題は、ヘルパー関数から返された文字列を出力することに加えて、文字列内の動的コード(フランス語の文字を含む)に何らかの形で関連しているようです。

私はこれを回避/修正する方法を知っています-しかし、私が疑問に思っているのは、なぜそれがこのようになっているのかについて誰かが何らかの洞察を提供できるかどうかです-それは何らかの正当な理由でこの方法ですか?IMO、低レベルになると、文字列を印刷すると文字列が印刷されるので、ある方法でエラーが発生し、別の方法では発生しないことがわかりません。

4

2 に答える 2

1

パッティング

#encoding: utf-8

ascii拡張文字を含むファイルの先頭にあるコードは、エンコーディング関連の問題を修正する必要があります(少なくともプロジェクトファイルからのもの...)

補間を使用するときにヘルパーで機能しない理由はわかりませんでした...

于 2012-11-14T21:06:23.880 に答える
0

場合によっては、ファイルに KCODE 環境変数を設定する必要があります (これは ruby​​ 1.8 との互換性にとって重要です)。

# encoding: UTF-8
$KCODE = 'UTF8' unless RUBY_VERSION >= '1.9'

ファイルが UTF-8 でエンコードされていない可能性もあります。そのためには、プレーンテキストのヘッダー以上のものが必要です。Eclipse では、[設定] -> [全般] -> [エディタ] -> [スペル]の下に非表示になり、ファイルを名前を付けて保存すると、メモ帳とほとんどの Windows プログラムで非表示になります。encaコマンドはLinuxでそれを行う1つの方法ですが、他にもあると確信しています。ファイルがUTF-8であると言っているのを見た回数を数えることはできませんが、UTF-8は8ビット文字のASCIIのように機能するため、実際には他のエンコーディングです。 HEX エディターのヘッダー。

ファイルのエンコーディングについては、時間をかけて読んでください。

これを正しく行うことは非常に重要であり、後で東アジア言語に移植する際の負担を大幅に軽減できます (常にこれを行うように計画する必要があります!)。

于 2012-11-15T05:05:19.707 に答える