我想在我的项目中使用inflector.net.
只是谷歌搜索,它似乎已经消失了.: - <
http://andrewpeters.net/inflectornet/
还有其他选择吗?
编辑(2011年5月11日):看起来斯科特柯克兰已经接过了警棍:
https://github.com/srkirkland/Inflector
(谢谢斯科特!)
看来,使用Rails/AR和Inflector方法加入到String通过ActiveSupport,我希望在默认情况下,
Nested::ClassDerived::FromAR.name.tableize == Nested::ClassDerived::FromAR.table_name
Run Code Online (Sandbox Code Playgroud)
但实际上是tableize调用underscore,并underscore没有实际强调::嵌套类分隔符,而是将其替换为a /来创建路径名.也许应该调用这种方法pathify?
无论如何,我需要实际的下划线.所以我正在考虑定义一个新的Stringinflector方法:
def new_inflector
underscore.gsub('/', '_')
end
Run Code Online (Sandbox Code Playgroud)
这实际上会强调嵌套的类名字符串.
所以,我的问题是,underscore为了正确地和通常地命名我的新变形器方法,没有配置,' ' 的正确变形是什么.是' underscoreize'(遵循由' tableize' 建立的惯例)还是' underscorize'?或许underscoreify?
有任何见解赞赏.
我正在使用CakePHP 2.1,需要为"软件"这个词定义一个Inflector规则,因为CakePHP正在将所有引用转换为复数形式的"软件",这是不正确的.Cake正在寻找SoftwaresController和一个名为Softwares的表.
我知道在引导带中创建规则,并阅读此文档参考.
http://book.cakephp.org/2.0/en/development/configuration.html#inflection-configuration
我还看了一下lib/Cake/Inflector.php文件,但是无法弄清楚定义规则的语法.它看起来有点像正则表达式.以下是一些规则示例.
'/(s)tatus$/i' => '\1\2tatuses',
'/(quiz)$/i' => '\1zes',
'/^(ox)$/i' => '\1\2en',
'/([m|l])ouse$/i' => '\1ice',
'/(matr|vert|ind)(ix|ex)$/i' => '\1ices',
'/(x|ch|ss|sh)$/i' => '\1es',
Run Code Online (Sandbox Code Playgroud)
定义软件奇异变形器规则的正确代码是什么?
编辑:
Inflector::rules('singular', array('rules'=>array('/software/'=>'software'),'irregular'=>array('software'=>'software'),'uninflected'=>array('software')));
Run Code Online (Sandbox Code Playgroud)
我尝试添加此规则,该规则适用于SoftwareController,但Cake抱怨它无法找到Softwares表,它实际上名为"Software".我觉得我很接近,但仍然缺少一些关于它如何工作的东西.
在Rails 4(支持多语言变形)中,我可以设置:
config.i18n.default_locale = :es
Run Code Online (Sandbox Code Playgroud)
在我的config/application.rb中,它允许我在控制台中执行以下操作:
'general'.pluralize(:es) => "generales"
Run Code Online (Sandbox Code Playgroud)
但是当我跑步时:
rails g model General conciencia:string atencion:string
Run Code Online (Sandbox Code Playgroud)
Rails生成的文件的'general'复数为'generals',西班牙语应该是'generales'
如果设置了语言环境,Rails不应该为其生成器使用多语言导向器吗?有没有办法强迫它使用它们?
谢谢!
我在为帆船赛生成脚手架时遇到了问题.我跑的时候
rails g scaffold Regatta name:string start_date:datetime
Run Code Online (Sandbox Code Playgroud)
我得到一个名为regattum的模型和一个名为regatta_controller的控制器(而不是regattas_controller)
invoke active_record
create db/migrate/20110609221608_create_regatta.rb
create app/models/regattum.rb
invoke test_unit
create test/unit/regattum_test.rb
create test/fixtures/regatta.yml
route resources :regatta
invoke scaffold_controller
create app/controllers/regatta_controller.rb
invoke erb
create app/views/regatta
create app/views/regatta/index.html.erb
create app/views/regatta/edit.html.erb
create app/views/regatta/show.html.erb
create app/views/regatta/new.html.erb
create app/views/regatta/_form.html.erb
invoke test_unit
create test/functional/regatta_controller_test.rb
invoke helper
create app/helpers/regatta_helper.rb
invoke test_unit
create test/unit/helpers/regatta_helper_test.rb
invoke stylesheets
Run Code Online (Sandbox Code Playgroud)
相同的public/stylesheets/scaffold.css
显然这是一个变形问题,但每当我修改/config/initializers/inflections.rb时,我都会收到错误消息:
The name 'Regatta' is either already used in your application or reserved by Ruby on Rails. Please choose an alternative and run this …Run Code Online (Sandbox Code Playgroud) 最后,我想使用Inflector.parameterize为文章标题创建slug,其中包含一堆unicode字符(例如"ḤellẒno"=>"hellz-no").根据http://api.rubyonrails.org/classes/ActiveSupport/Inflector.html#method-i-transliterate,它说它们将它们放在locales/en.yml文件中.
# Store the transliterations in locales/en.yml
i18n:
transliterate:
rule:
?: "h"
?: "z"
Run Code Online (Sandbox Code Playgroud)
我试过了,但以下不起作用:
"?ell? no".parameterize
# => "ell-no"
Run Code Online (Sandbox Code Playgroud)
但是,当我像第二段建议的那样在Ruby中更改它时,它可以工作.
I18n.backend.store_translations(:en, :i18n => {
:transliterate => {
:rule => {
"?" => "H",
"?" => "Z"
}
}
})
"?ell? no".parameterize
# => "hellz-no"
Run Code Online (Sandbox Code Playgroud)
我想我想知道为什么在locales/en.yml中放置自定义音译不起作用.
即使有人给出答案,作为一个Rails noob,我也想知道通常把代码放在第二个块的位置来手动设置I18n.backend.store_translations?
当使用 SwiftUI 的 inflect 参数时,如下所示:
import SwiftUI
struct ContentView: View {
@State var count = 1
var body: some View {
VStack {
VStack{
Text("^[\(count) Song](inflect: true)")
Button("Add"){ count += 1}
Button("Remove"){ count -= 1}
}
}
.padding()
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
Run Code Online (Sandbox Code Playgroud)
一切都按预期进行,但如果我们尝试做这些事情,却不会:
import SwiftUI
struct ContentView: View {
@State var count = 1
var body: some View {
VStack {
VStack{
Text(generateString)
Button("Add"){ count += 1}
Button("Remove"){ count …Run Code Online (Sandbox Code Playgroud) 对于CakePHP应用程序,我正在考虑遵循CakePHP命名约定的数据库表名称.但是,很多时候我遇到了一个通用表,其中包含的信息不是它自己的实体,而是包含其他实体信息.此表中的信息旨在重新使用,因此它与主实体表分开放置.
例如:我使用的产品有时可能是主产品.在这种情况下,表"products"链接到表"master_product_information",以获取我在"products"表中不需要的额外信息.
另一个示例:包含多个页面的元数据的表.通常我会将表命名为"pages_metadata",但对于Cake来说,这需要是复数,而"pages_metadatas"似乎并不合适.所以我再次选择"pages_metadata_information".
如何命名不包含实体的表?[entity] _information是一个好的信息吗?
我希望听到一些建议.
谢谢.