Хотите использовать более одной кодировки в Action Mailer

#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, когда на самом деле он в другой кодировке.