根据用户名的最终字母更改文本

时间:2018-12-03 14:31:31

标签: html ruby-on-rails ruby yaml slim

在我的系统中,用户将注册他们的姓名。在系统使用的自然语言中,名称的结尾根据其用法而不同,例如:

  • 谁:"name surname"
  • 与谁:"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 :(得分:3)

"name surname".gsub(/e\b/, 'ai') # "namai surnamai"

.gsub使用正则表达式搜索并替换字符串。贪婪的.sub版本意味着它将替换所有出现的内容。

\b匹配任何单词边界。

答案 1 :(得分:1)

这真的很容易,这就是为什么我喜欢Ruby ...

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

答案 2 :(得分:1)

尝试一下,简单的单行代码

@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(" ")