根据用户名的最后一个字母更改文本

Changing text based on the final letter of user name

在我的系统中,用户会注册他们的名字。在系统使用的自然语言中,名称根据其用途以不同方式结束,例如:

因此,我需要在某些地方更改@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

有什么解决这个问题的建议吗?

这真的很简单,这就是我喜欢 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

试试这个,简单的单行代码

@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(" ")
"name surname".gsub(/e\b/, 'ai') # "namai surnamai"

.gsub 使用正则表达式在字符串中进行搜索和替换。它是 .sub 的贪婪版本,意味着它将替换所有出现的地方。

\b 匹配任何单词边界。