Изменение текста на основе последней буквы имени пользователя - PullRequest
0 голосов
/ 03 декабря 2018

В моей системе пользователи будут регистрировать свои имена.На естественном языке, с которым используется система, имена заканчиваются по-разному в зависимости от ее использования, например:

  • who: "name surname"
  • with who: "namai surnamai"

В связи с этим мне нужно изменить окончание @provider_user.name в некоторых местах;если он заканчивается на e, замените e на ai.

Мой тонкий HTML-код:

= render partial: 'services/partials/messages/original_message', locals: { header: t('html.text.consultation_with.for_provider', name: @provider_user.name)

Он берет текст из файла yml и использует @provider_user.name.

Есть предложения, как это обойти?

Ответы [ 3 ]

0 голосов
/ 03 декабря 2018

Попробуйте это, простой однострочный код

@provider_user.name.split.map {|w| (w.end_with?('e') ? (w.chomp(w[w.length - 1]) + 'ai') : w) }.join(" ")

Я уверен, он преобразует "name surname" в "namai surnamai".

В дополнительных случаях ...

@provider_user.name.split.map {|w| (w.end_with?('e') ? (w.chomp(w[w.length - 1]) + 'ai') : (w.end_with?('us') ? (w.chomp(w[w.length - 1]) + 'mi') : (w.end_with?('i') ? (w.chomp(w[w.length - 1]) + 'as') : w))) }.join(" ")
0 голосов
/ 03 декабря 2018
"name surname".gsub(/e\b/, 'ai') # "namai surnamai"

.gsub использует регулярное выражение для поиска и замены в строке.Это жадная версия .sub, означающая, что она заменит все вхождения.

\b соответствует любому слову.

0 голосов
/ 03 декабря 2018

Это действительно легко, поэтому я люблю Руби ...

class String
    def replace_ends(replace, with) 
        end_array = self.split " "
        end_array.map! do |var|
            break unless var.end_with? replace
            var.chomp(" ").chomp(replace) + with
        end
        return end_array.join " "
    end
end
...