#ruby-on-rails #ruby #encoding #character-encoding #internationalization
#ruby-on-rails #ruby #кодирование #кодировка символов #интернационализация
Вопрос:
У меня есть приложение Rails 4, которое было интернационализировано. Мое приложение отправляет электронные письма для каждого языка. Изначально она была написана на английском и французском языках. Там, где у меня есть текст на французском языке, я добавил # encoding: utf-8
инструкцию в начале файла.
Я только что добавил португальский язык в свое приложение. В моей почтовой программе у меня есть # encoding: utf-8
инструкция в начале файла. Однако это не работает, когда я пытаюсь отправить электронные письма на португальском языке из-за кодировки UTF-8. Я изменил кодировку в этих электронных письмах с UTF-8 на ISO-8859-1.
Я использую иностранный текст в почтовой программе вместо использования хэшей I18n, потому что у меня есть несколько многоязычных пользователей, использующих мое приложение. Каждый пользователь может выбрать язык, на котором он хочет получать свои электронные письма.
Есть ли способ использовать более одного типа кодировки в одном файле? Я проводил онлайн-поиск, но видел только примеры, где оно имеет единственное значение.
Буду признателен за любую помощь.
ОБНОВЛЕНИЕ: 3.07.2014 7: 25 утра CDT
Вот ошибка, которую я получил при попытке отправить электронное письмо на португальском.
I, [2014-07-03T06:44:38.810000 #31093] INFO -- : Completed 500 Internal Server Error in 43ms
F, [2014-07-03T06:44:38.812179 #31093] FATAL -- :
ActionView::Template::Error (Your template was not saved as valid UTF-8. Please either specify UTF-8 as the encoding for your template in your text editor, or mark the template with its encoding by inserting the following as the first line of the template:
# encoding: <name of correct encoding>.
The source of your template was:
<!DOCTYPE html>
<html>
<head><meta content="text/html; charset=UTF-8" http-equiv="Content-Type" /></head>
<body>
<p style="text-align: center;"><a href="http://www.iktusnetlive.com"><img src="http://www.iktusnetlive.com/assets/header-speakers-pt.jpg", alt: "iktusNETlive"></a></p>
<p><%= @user.first_name %>, sua conta de usuário GRATUITA iktusNET foi ativada!!!</p>
<p>Você agora pode usar sua conta de usuário GRATUITA iktusNET com endereço de email <%= @user.email %> com nome de usuário <%= @user.username %>.</p>
<p>Você agora tem acesso ao Webcast de Vídeo ao Vivo, ao FÓRUM de Discussão à Rede de CÍRCULO Social.</p>
<p>Nota: Tenha certeza que você escreva abaixo sua informação de login. Letras em Caixa Alta no seu endereço de email e nome de usuário serão ignoradas. Seu endereço de email e nome de usuário serão salvos somente com letras em caixa baixa. Nós armazenamos a sua senha de maneira segura. Ela é encriptada de tal forma que ninguém pode descobrir o que ela é, incluindo o Time da iktusNET. Contanto, se você esquecer a sua senha você pode requerer que sua senha seja resetada na tela de login.</p>
<p>Nós temos uma Biblioteca de Mídia onde você pode ouvir, assistir e ler materiais de ministérios que ensinam mensagens de forma similar à ensinada pelo Centro de Oração de Tulsa. Você pode usar a Biblioteca de Mídia sem estar logado na sua Conta de Usuário GRATUITA iktusNET. Esta página pode ser acessada a partir daS PáginaS HOME ou MÍDIA. </p>
<p style="text-align: justify;">Clique <%= link_to "here", "http://www.iktusnetlive.com/pt/invite" %> para Convidar seus AMIGOS para ingressar à iktusNETlive. </p>
<p>Muito obrigado por ingressar à iktusNET e tenha um ótimo dia! </p>
<p>O Time iktusNET</p>
</body>
</html>):
app/mailers/user_mailer.rb:31:in `acctact_email_pt'
app/controllers/users_controller.rb:134:in `update'
Комментарии:
1. Я не думаю, что использование UTF-8 должно помешать вам отправлять письма на португальском.
2. Я добавил ошибку, полученную при попытке отправить электронное письмо на португальском, которое прислал мне кто-то из Бразилии. Когда я пытаюсь открыть его, он говорит, что это файл Western Latin ISO 1. Как вы можете видеть, кодировка — UTF-8. Поскольку я получил ошибку 500, я изменил ее для будущих писем на ISO-8859-1. Решит ли это проблему или мне следует добавить # encoding ISO-8859-1 в верхней части представления? Мне не нужно было делать это с французскими электронными письмами.
3. Проблема в том, что сам файл неправильно закодирован в utf-8. Вероятно, это связано с тем, что текстовый редактор, который вы использовали для его создания, по умолчанию не сохраняется как utf-8. Лучшим решением было бы выяснить, как это сделать, и использовать utf-8 для всего. (В настоящее время это используется по умолчанию в ruby)
4. Я воссоздам файл и скопирую текст в файл, который прислал мне человек из Бразилии. Это может решить проблему. Я протестирую это позже сегодня.
5. @Slicedpan ваше предложение сработало. Пожалуйста, отправьте это в качестве ответа, и я проверю это. Большое спасибо!!!
Ответ №1:
Кодировка самого файла просмотра неверна. Вы должны настроить свой текстовый редактор для сохранения файлов в допустимом utf-8.
Пометка файла как #encoding utf-8
не поможет, поскольку это заставит ruby (неправильно) интерпретировать его как utf-8, когда на самом деле он в другой кодировке.