php - 从刀片文件中自动解析语言字符串
问题描述
我想从刀片文件 ( {{ __('some phrase') }}
) 中解析出语言字符串并将它们自动存储在语言文件中。我确实尝试了一个与此相关的插件,它工作正常,但不允许运行函数。我创建了以下正则表达式。
{ // Opening curly brace
(?:\s+?)? // Optional spacing
{ // Opening curly brace
(?:\s+?)? // Optional spacing
(?:.+?)? // Optional function
__\( // Begin translation function
(?:\s+?)? // Optional spacing
(?:'|\") // Single or double quote
(.+?) // Actual string to capture
(?:'|\") // Single or double quote
(?:\s+?)? // Optional spacing
(?:\)|,) // End translation function, basically
(?:.+?)? // Ending optional function
(?:\s+?)? // Optional spacing
} // Ending curly brace
(?:\s+?)? // Optional spacing
} // Ending curly brace
"/{(?:\s+?)?{(?:\s+?)?(?:.+?)?__\((?:\s+?)?(?:'|\")(.+?)(?:'|\")(?:\s+?)?(?:\)|,)(?:.+?)?(?:\s+?)?}(?:\s+?)?}/"
我知道这并不完美,我怎样才能进一步改进它以更好地捕捉一些边缘情况,例如一些结束字符串打破了中间的捕获?
解决方案
我最近使用这个 github repo作为基础做了这样的事情:
我在这里唯一需要的是实际的解析正则表达式和逻辑,可以在这个文件中找到
为简单起见,他们所做的是解析并匹配用于显示已翻译字符串的实际可能函数:__
, _t
, @lang
. 通过这样做,它不再需要搜索和匹配花括号,因为如果您正在使用这可能会很痛苦:
- 过滤器:
{{ __('whatever') | ucfirst }}
- 条件渲染:
{{ $title ?? __('Whatever') }}
还有许多其他情况会让你的正则表达式发疯。
通过仅匹配函数,模式非常简单:
/(__|_t|@lang)\(\h*[\'"](.+)[\'"]\h*[\),]/U
推荐阅读
- angular - 如何从会话存储中获取价值
- r - R ggplot viridis 改变颜色渐变
- powershell - 在 Win10 上从 PowerShell 脚本中打印 PNG 文件
- reactjs - material-ui 自动完成中的自定义 renderInput
- java - 事件/动作机制的设计问题,Java 泛型
- r - 用于R中数据框列表的自定义函数的哪些参数
- android - 如何将信息传递到 ViewPager 选项卡中的片段?
- sql-server - SQL Server 将数据类型 varchar 转换为浮点数时出错
- reactjs - 将泛型传递给功能组件 React Typescript
- amazon-web-services - 在 AWS SageMaker GroundTruth 中如何计算置信度分数?