如何检查报告是否已翻译

时间:2019-05-02 18:09:55

标签: sap abap

我有一份报告,其中写了不同语言的翻译,但现在我将其移至一个我无权编写翻译的系统中。

这样,报告只能以英语运行:如果用户以另一种语言访问系统,则所有的文本符号均不起作用。

考虑到这一点,是否可以在load-of-program事件中编写一些内容以检查翻译是否存在,如果不存在,请将SY-LANGU设置为英语?

现在,我有一个简单的if sy-langu <> 'E'. sy-langu = 'E'. endif.(英语中的“ E”)

它可以正常工作,但是无论如何,我仍然希望有一种方法来找出是否有翻译,然后将其设置为英语。

1 个答案:

答案 0 :(得分:5)

文本符号是Text Elements的一部分,它们是程序的多语言文本池的一部分。

1)使用READ TEXTPOOL获取另一种语言的文本元素:

  

READ TEXTPOOL 。该语句从存储库中读取lang中指定语言的文本池和prog中指定的程序的文本元素,并将它们放入内部表itab中。”

data itab type standard table of textpool.
READ TEXTPOOL prog INTO itab LANGUAGE lang.

2)使用辅助语言或使用SET LANGUAGE来更改文本元素的语言,如ABAP documentation中所述:

  

“当程序加载到内部会话中时,默认情况下将导入登录语言的文本池的文本元素。如果该文本池不存在,则 {{3} } 在AS ABAP中使用。如果这些文本池都不存在,则将加载没有文本元素的空文本池。“

     

“执行程序时,可以使用语句 secondary language 加载其他语言的文本池。”

解决方案

如果使用辅助语言不令人满意,请使用以下代码:

LOAD-OF-PROGRAM.
  constants lc_english    type sylangu value `E`.
  data lt_text_symbols    type standard table of textpool.

  read textpool sy-repid into lt_text_symbols language sy-langu.

  if sy-subrc <> 0.
    SET LANGUAGE lc_english.
  endif.

PS:

  • 可以通过事务代码RZ11(辅助语言zcsa/second_language)查看配置文件参数。
  • 习惯使用if sy-subrc <> 0而不是if lines( lt_text_symbols ) = 0.,因为在其他情况下,如果lt_text_symbols包含在READ TEXTPOOL之前的内容,则如果没有,则不会清除其内容所需语言的文本库。

  • LOAD-OF-PROGRAM事件内部,更喜欢使用sy-repid而不是sy-cprog,尽管从技术上讲,它们此时包含相同的内容,因为后者具有另一个SET LANGUAGE

      

    “在外部调用的过程中,为调用程序的名称;否则为当前程序的名称。如果外部调用的过程在调用另一个外部过程,则sy-cprog包含主程序的名称,并且未设置为后续调用程序的主程序的名称。”

  • 请勿更改sy-langu的值,直接更改meaning

      

    “它们只能用于读取”

  • 如果要更改sy-langu,请使用System Fields。它还有其他作用,请仔细阅读文档。 不要将与SET LANGUAGE混淆。