delphi - 如何在.pot文件中排除DBGrid.Column.FieldName

标签 delphi gettext delphi-6

我用Delphi 6制作了一个应用程序。 之后,我提取了一个 .pot 文件,其中包含所有要翻译的字符串。 问题是有些字符串不需要翻译,如果翻译就会产生问题。

其中之一是 TDBGrid.Columns[x].FiedlName

我尝试将这些行放入 ggexclude.cfg 文件中,但它们不起作用。

# exclude all occurences of the specified class
# and property in all DFM files in or below the
# path where "ggexclude.cfg" is in
[exclude-form-class-property]
TDBGrid......FieldName
TDBGrid.....FieldName
TDBGrid....FieldName
TDBGrid...FieldName
TDBGrid..FieldName
TDBGrid.FieldName
item.FieldName

TDBGrid.Columns.FieldName
TDBGrid.Columns.TDBGridColumns
TDBGrid.Columns.TDBGridColumns.FieldName
TDBGrid.Columns.Item.FieldName

TColumn.FieldName
TDBGridColumns.FieldName

FieldName

*.FieldName

我认为问题在于 .dfm 文件中解析器不理解它们是 TColumn 对象的一部分

  inherited DBGTable: TDBGrid
    Height = 309
    DataSource = DMUsers.DSUser
    Columns = <
      item
        Expanded = False
        FieldName = 'USER'
        Visible = True
      end
      item
        Expanded = False
        FieldName = 'CODE'
        Width = 31
        Visible = True
      end
      item
        Expanded = False
        FieldName = 'NAME'
        Width = 244
        Visible = True
      end>
  end

有人有解决方法吗?

我不能信任自动ignore.pot,因为有些字符串会导致误报。

最佳答案

ggexinclude.cfg-File 的文档指出您无法访问属于集合一部分的项目:

A special case are collections in forms (like TDBGridColumns in a TDBGrid [...]) You can exclude only the whole collection, but not certain properties of a collection.

因此解决方法是排除整个列集合:

TDBGrid.Columns

但是这样你也会失去 Title.Caption。

我看到的唯一其他解决方法是修改 dxgettext。恕我直言,以下内容会很高兴:

[always-exclude-property]
FieldName

编辑:我想链接到 ggexclude.cfg 文档,但我现在无法在线找到它。因此,我可以随意发布文档,因为它保存在我自己的 ggexclude.cfg 文件中 - 但没有任何保证:

# Text in square brackets, like "[exclude-dir]", is called a "section".
# Each line that is not empty, not a comment and not a section holds 
# exactly 1 "value".
# All lines below a section are scanned for values belonging to that 
# section until the next section starts. You can use the same section 
# several times. It will all be added up.

[exclude-dir]
# This section prevents a whole folder and all it's subfolder from being scanned.
# Each value is exactly one folder. On Windows, it's not case-sensitive.
# You can use relative or absolute paths. No wildcards allowed.

# example:
# subfolder

# these are valid values as well:
# another\folder
# another\folder\
# Windows: D:\yet\another\folder
# Linux:  /home/zaphod/projects/subfolder/
# You don't have to worry about the path delimiters, both "/" and "\"
# can be used. They are converted to "/" internally

[exclude-file]
# This section prevents a whole file from being scanned.
# Each value is exactly one file. On Windows, it's not case-sensitive.
# You can use relative or absolute paths. Wildcards allowed.

# example:
# Unit4.dfm

# Using the wildcard ".*" for a file extension means that the following
# matching Delphi-files will be excluded: dfm, xfm, pas, inc, rc, dpr:
# Unit5.*

# If Unit3 is already excluded by the [exclude-dir] above, because it
# is located in a subfolder of "subfolder", listing it here therefore 
# has not further effect:
# subfolder\subfolder\Unit3.dfm

# you can use absolute paths as well, like this:
# on Windows: D:\test\Unit.pas
# on Linux:   /home/zaphod/projects/MainForm.*

[exclude-form-class-property]
# This section prevents a certain property of a class to
# be excluded from scanning in all forms of the folder and subfolders
# where "ggexclude.cfg" is located.
# The format for a value is "Classname.Properyname". It's not case-sensitive. No wildcards allowed.
# Classname is obvious, the propertyname has to be written the way it
# is written in the form file. If you're in doubt about how a certain property
# has to be stored here, just copy and paste the line from the DFM file here and
# put the classname before that.
# For simple strings the property name is one word:
# TLabel.Caption

# ...and for TStrings it's like this:
# TListbox.Items.Strings
# TMemo.Lines.Strings
# TQuery.SQL.Strings

# TEdit is listed in the [exclude-form-class]-section below which means
# that the whole class will be excluded. Listing TEdit.Text here therefore
# has no further effect
# TEdit.Text

# A special case are collections in forms (like TDBGridColumns in a TDBGrid,
# TParams in a TQuery or TActionManager.ActionBars). You can exclude only
# the whole collection, but not certain properties of a collection. That 
# means as well that in the case of nested collections (see TActionManager.ActionBars
# in the sample unit "nestedcollections.dfm"), everything that appears below
# the collection with the highest level will be ignored.
# Note that some collections are saved with another name than their propertyname. 
# For example: "TQuery.Params" will be saved as "ParamData" in the form file.  
# TQuery.ParamData
# TDBGrid.Columns
# TActionManager.ActionBars

# these lines won't work:
# TDBGrid.Columns.Title.Caption
# TActionManager.ActionBars.ContextItems
# ("ContextItems" is a nested collection, which can hold another nested collection and so on)

[exclude-form-class]
# This section prevents a whole class to
# be excluded from scanning in all forms of the folder and subfolders
# where "ggexclude.cfg" is located.
# The format for a value is just "Classname". It's not case-sensitive.
# A wildcard "*" can be used optionally.
# A special case are collections, see [exclude-form-class-property] for that

# Here, everything of TEdit in DFM/XFM-files will be ignored. Remember:
# other classes derived from TEdit have to listed seperatly in order to 
# exclude their properties as well. Inheritance is not recognized by dxgettext:
# TEdit

# Visual containers like TPanel or TScrollbox have to be treated slightly different. 
# If you have a TPanel with a TLabel on it, writing "TPanel" would only
# exclude the properties of TPanel itself. If you want to exclude
# everything contained in a TPanel, use the wildcard "*" at the end, like this:
# TPanel* 

# The following only excludes the properties of TScrollbox itself, but not the controls
# contained in Scrollboxes (except other classes explicitly listed here, like
# TEdit above):
# TScrollbox

[exclude-form-instance]
# This section prevents a certain instance (=object) of a class in a certain form file to
# be excluded from scanning.
# Each value is exactly one file with one instance. The format is 
# "filename:instancename". On Windows, the "filename" part is not 
# case-sensitive. You can use relative or absolute paths.
# Note that if the instance is something like a container or menu, 
# everything belonging to that will be excluded.
# Note also that a frame on a form might contain a component with the
# same name as a component on the form. They would both be excluded. 
# Unit6.dfm:Popupmenu
# Unit6.dfm:Label5

关于delphi - 如何在.pot文件中排除DBGrid.Column.FieldName,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6294173/

相关文章:

listview - 在 RAD Studio 10 Seattle 中,我的 ListView 的属性 ".Text"和 ".Detail"带有下划线作为错误。我该如何解决?

php - 创建 php 后端替代 poedit

java - 有没有办法在 ICU MessageFormat 和 Gettext Po 之间相互转换?

php - 仅在 WooCommerce 中替换管理单个订单页面上的标题文本

delphi - 如何知道TToolButton的MenuItem是否被下拉?

c++ - 从 Delphi 7 中的 C++ DLL 接收字符串数组

delphi - 用 GDI+ 替换 StretchDIBits(在将图像绘制到打印机 Canvas 时)

delphi - 为什么在 Delphi 6 中将 NIL 数组分配给 Variant 会导致返回非空数组?

delphi - 在 Delphi 中编译和构建有什么区别?

delphi - 如何使用Delphi的AsCurrency显示没有货币符号的货币?