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

发布于 2024-11-14 20:07:42 字数 1264 浏览 3 评论 0原文

我用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,因为有一些字符串会导致误报。

I made an application with Delphi 6.
After that I extracted a .pot file with all the strings to translate.
The problem is that there are strings that don't have to be tranlated, and if translated will generate problems.

Une of this is TDBGrid.Columns[x].FiedlName

I tryed to put this lines into the ggexclude.cfg file, but they doesn't work.

# 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

I think that the problem is that within the .dfm file the parser doesn´t understand that they are part of a TColumn object

  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

Does anybody have a workarround?

I can't trust the automatic ignore.pot, because there are some strings that cause false possitives.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

逆光飞翔i 2024-11-21 20:07:42

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

一个特殊的情况是表单中的集合(例如 TDBGridColumns 中的
TDBGrid [...])您只能排除整个集合,但不能排除
集合的某些属性。

因此,解决方法是排除整个 Columns-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

The documentation to the ggexclude.cfg-File states that you cannot access items, that are part of a collection:

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.

So the workaround would be to exclude the whole Columns-Collection:

TDBGrid.Columns

But this way you will lose Title.Caption too.

The only other workaround I see, would be to modify dxgettext. The following would be nice to have IMHO:

[always-exclude-property]
FieldName

Edit: I wanted to link to the ggexclude.cfg-documentation, but I cannot find it online right now. So I feel free to post the documentation as it is saved in my own ggexclude.cfg-file - but without any guarantee:

# 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
只有影子陪我不离不弃 2024-11-21 20:07:42

您可能应该尝试运行

 msgmkignore filenamethatcontainsextrajunk.po -o autogenignore.po

然后打开 autogenignore.po 并找到它声明所有排除的字段名的特殊方式(这是 msgmkignore 的工作)。每次自动生成时,您都必须查看自动生成的排除规则。您似乎正在尝试手动生成所有排除规则。在我看来,您最好采用自动生成的包含内容并手动检查它们以排除所有数据库字段名称和列名称。

正如您在问题中所述,您显然不能将“忽略”的整个工作交给 msgmkignore 工具,但您可以使用您的大脑加上此工具,并将这些结果结合起来。

You should probably try running

 msgmkignore filenamethatcontainsextrajunk.po -o autogenignore.po

Then open up the autogenignore.po and find the special way it has declared all your fieldname excludes (Thats the job of msgmkignore). Every time you auto-generate it you then have to review the auto-generated exclusion rules. It seems you're trying to generate all your exclusion rules by hand. It looks to me like you'd be better off taking the auto-generated includes and reviewing them by hand to exclude all the database field names and column names.

You obviously can't hand the entire job of "ignores" to the msgmkignore tool, as you state in your question, but you can use your brain, plus this tool, and combine those results.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文