使用流畅的语法将每个单词的首字母大写?

Posted

技术标签:

【中文标题】使用流畅的语法将每个单词的首字母大写?【英文标题】:Capitalize first letter of each word with liquid syntax? 【发布时间】:2014-02-14 10:44:01 【问题描述】:

我正在尝试使用流动语法在 LocomotiveCMS 安装中设置 SEO。我正在尝试对其进行编码,以便使用 page.title 动态拉取页面标题,然后强制它大写每个单词的第一个字母。

我试过了:

<title>
       page.title | camelcase  |  site.name 
</title>

基于此处的流式语法文档:http://docs.shopify.com/themes/liquid-basics/output#camelize

但它不起作用。使用capitalize 有效,但它只将第一个单词的第一个字母大写。

谢谢!

【问题讨论】:

我也尝试使用camelize 代替camelcase,但这也没有用。 camelcase 是 Shopify filter, not a Liquid filter - 所以它在 Locomotive CMS 中不起作用。 【参考方案1】:

有一种方法可以仅使用 Liquid 语法来实现这一点。不需要任何插件。

将您的单词字符串分解为一个数组,然后使用 for 循环与大写过滤器相结合,将每个单词的第一个字母大写。如果您将其适当地封装在捕获语句中,则每个单词的第一个字符都是大写的。

% assign words = "Hi, how are you today?" | split: ' ' %

% capture titlecase %
  % for word in words %
     word | capitalize 
  % endfor %% endcapture %
 titlecase 

输出:

嗨,你今天好吗?

请注意,所有这些都在一行中,并且在整个捕获语句中只出现一次空格!

【讨论】:

尽管使用了a custom plug-in 或css-capitalize,但我很确定这只是解决方案。 这是唯一对我有用的东西。好主意!【参考方案2】:

我建议使用插件来获得这种行为

_plugins/_capitalize_all.rb:

require 'liquid'
require 'uri'

# Capitalize all words of the input
module Jekyll
  module CapitalizeAll
    def capitalize_all(words)
      return words.split(' ').map(&:capitalize).join(' ')
    end
  end
end

Liquid::Template.register_filter(Jekyll::CapitalizeAll)

用法:

 "mein text" | capitalize_all 

【讨论】:

感谢您的回答!请问如何在液体主题文件夹中添加插件文件? @YaoyuYang 我记得你只要把它放到你的 jekyll 站点的_plugins 目录中就可以了 我明白了。我没有使用 Jekyll,我正在使用 shopify 网站,不知道在哪里添加它。 @YaoyuYang 没有这方面的经验,抱歉。【参考方案3】:

如何使用 CSS 进行设置?

title 
    text-transform:capitalize;

编辑:我对文本转换做了一个错字,现在已修复;

【讨论】:

这不是他想要的。他希望他的标题中的所有单词都以大写字母开头。 对不起,我的意思是:text-transform:capitalize; 这实际上做了我想做的事情,即 Jekyll 中的标题案例类别。谢谢提醒。 好主意...幸运的是,CSS 中的大写字母并不像 Liquid 中那么糟糕 ;-)【参考方案4】:

关于您发布的链接,骆驼案的工作原理如下:

 'coming-soon' | camelcase 

它接受一个字符串,它的单词用'-'分隔,然后将它的驼峰化。我只有一个问题:你的“page.title”怎么样了?它的单词是用'-'分隔的吗?或者你有这样的文字:“这是我页面的标题”?如果是这样,您应该将其替换为:“this-is-the-title-of-my-page”

希望这会有所帮助。

【讨论】:

【参考方案5】:

感谢您的回复,实际上我在发布此内容后立即找到了解决方法。我现在不是调用page.title,而是调用page.seo_title,它可以通过LocomotiveCMS 后端以正确的大小写手动输入。

【讨论】:

【参考方案6】:

这一系列过滤器一直对我有用。但是,如果您的标题有 5 个连续的破折号或您不希望以下字母大写的破折号,则会遇到问题。

% assign headerTitle = page.title | split: " " | join: "-----" | camelcase | split: "-----" | join: " " %

【讨论】:

【参考方案7】:

这对我有用: page.title |大写

它只大写句子中的第一个单词。

我的第一直觉是这会将每个单词都大写,但事实并非如此。

来源:https://docs.shopify.com/themes/liquid-documentation/filters/string-filters#capitalize

【讨论】:

是的,这在我的 OP 中提到了 我实际上遇到了相反的问题。我不希望标题中的每个单词都大写。在我的情况下,我从文件名中提取标题而不是前端标题。当我这样做时,每个单词都会大写。这可能是 Jekyll 的一个错误。因为它是一个令人惊讶的约定。预期的标题将是文件名中写入的标题。我正在研究如何获得实际的文件名标题。在您的情况下,如果您不想弄乱您的邮政编码,您可以只编写一个液体循环并将其包含在内。或者像我一样做,只是从文件名中提取标题。

以上是关于使用流畅的语法将每个单词的首字母大写?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 JavaScript 将字符串中每个单词的首字母大写?

将每个单词的首字母大写而不改变当前的大写字母

如何在 Perl 中将字符串中每个单词的首字母大写?

C++ 每个单词的首字母必须大写

使用 Vim 将所选内容中每个单词的首字母大写

将一句英文中每个单词的首字母大写,其余字母小写。