首页 > 解决方案 > 您对基于 sy-langu 的语言屏蔽有何看法

问题描述

Roses are red,
violets are blue

Unexpected 'Langu'
on line 32.

好吧,简而言之:技术限制迫使我忽略西里尔语材料文本(MAKT 表中的短文本)。

作为一个 ABAP 人,我总是采取务实的解决方案:我已经通过浏览表 T002 并在谷歌上搜索这些语言是否基于西里尔字符来手动排除这些语言。

有用。但并不性感。反馈表示赞赏。

REPORT Y_TEST_BLOCK_LANGU.

  DATA langu_logon    TYPE c LENGTH 2.
  DATA langu_selected TYPE c LENGTH 1.

  CONSTANTS:
    BEGIN OF language,
      german  TYPE c LENGTH 1 VALUE 'D',
      english TYPE c LENGTH 1 VALUE 'E',
    END OF language.

  CALL FUNCTION 'CONVERSION_EXIT_ISOLA_OUTPUT'
    EXPORTING
      input  = sy-langu
    IMPORTING
      output = langu_logon.

  IF
      langu_logon = 'BG'
  OR  langu_logon = 'KK'
  OR  langu_logon = 'RU'
  OR  langu_logon = 'SR'
  OR  langu_logon = 'SH'
  OR  langu_logon = 'UK'
   .
    langu_selected = language-english.
  ELSE.
    langu_selected = sy-langu.
  ENDIF.

START-OF-SELECTION.

PARAMETERS p_matnr TYPE matnr.

  SELECT SINGLE maktx FROM  makt INTO @DATA(maktx)
       WHERE  matnr  = @p_matnr
       AND    spras  = @langu_selected.

    WRITE: /'This is the text',
           / maktx,
           /'for Material number',
           / p_matnr
           .

标签: localizationinternationalizationabap

解决方案


或者,您可以从材料文本本身开始反向排除。从 MAKT 中选择所有包含不需要的字符的短文本 - 无论这些是什么。然后追溯这些文本属于哪些语言。然后将这些语言列入拒绝名单。所涉及的 SELECT 可能对于在线处理来说过于耗时,但可以定期重复,以填充 DB-persisted 拒绝列表。

正如其他一些人已经指出的那样,更简洁的解决方案是使您的 UI 能够正确显示这些字符。或者,如果不可能,您至少可以屏蔽它们,例如将它们转义为它们的 HTML 或 UTF 代码。这看起来不太好,但至少 UI 会显示一些东西。

正如 Dragonthoughts 建议的那样,还要确保您研究其他语言。如果您的文本包含其他非拉丁语言,那么您在其他地方也可能会遇到麻烦。不小心碰到汉字可能听起来有点不对劲。但是想想其他广泛使用的字符,例如广泛使用的希腊符号,如 alpha、epsilon、omega 等,这些符号很可能出现在其他英文产品描述中。


推荐阅读