You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle Apex多语言菜单切换:登录后动态显示英/阿语标签

Oracle Apex 多语言菜单动态切换实现方案

一、核心解决:根据会话语言动态渲染菜单标签

直接在动态列表的SQL查询中,通过当前会话语言判断返回对应列即可,无需复杂逻辑。

修改后的示例SQL查询

假设你原本的菜单查询是关联MENUS和USER_GROUP_PAGE_ACCESS表,修改后如下:

SELECT 
  CASE apex_util.get_session_lang()
    WHEN 'ar-sa' THEN m.MENU_NAME_ARABIC
    ELSE m.MENU_NAME_ENGLISH
  END AS label,
  m.PAGE_URL AS target,
  NULL AS is_current,
  NULL AS image,
  NULL AS attributes
FROM MENUS m
JOIN USER_GROUP_PAGE_ACCESS ugpa 
  ON m.MENU_ID = ugpa.MENU_ID
WHERE ugpa.USER_GROUP_ID = :APP_USER_GROUP_ID -- 替换为你的用户组过滤条件
ORDER BY m.MENU_ORDER

关键说明

  • apex_util.get_session_lang()会返回当前会话的语言标识(即你设置的en-us或ar-sa)
  • 用CASE分支直接映射到对应语言的菜单名称列,切换语言后菜单标签会实时更新

二、动态列表:SQL查询 vs 返回SQL的函数?

优先用直接SQL查询

如果只是简单的语言判断、权限过滤这类逻辑,直接写SQL更简洁,维护成本低,Apex执行效率也更高,是大多数场景的最优选择。

什么时候用返回SQL的函数?

仅当逻辑复杂到直接SQL无法优雅实现时才考虑,比如:

  • 需要根据多个会话变量、用户属性动态拼接查询条件
  • 有重复使用的复杂查询逻辑,需要封装复用
  • 需要动态生成ORDER BY、关联表等灵活的SQL结构

示例函数写法(带绑定变量防注入)

CREATE OR REPLACE FUNCTION get_dynamic_menu_sql(p_user_group_id NUMBER) RETURN VARCHAR2 IS
  v_lang VARCHAR2(10) := apex_util.get_session_lang();
  v_sql VARCHAR2(1000);
BEGIN
  v_sql := 'SELECT ' || 
           CASE v_lang WHEN 'ar-sa' THEN 'MENU_NAME_ARABIC' ELSE 'MENU_NAME_ENGLISH' END ||
           ' AS label, PAGE_URL AS target ' ||
           'FROM MENUS m JOIN USER_GROUP_PAGE_ACCESS ugpa ON m.MENU_ID = ugpa.MENU_ID ' ||
           'WHERE ugpa.USER_GROUP_ID = :P_GROUP_ID ' ||
           ' ORDER BY m.MENU_ORDER';
  RETURN v_sql;
END;

之后在动态列表的「SQL Query (returned by function)」选项中调用:get_dynamic_menu_sql(:APP_USER_GROUP_ID),并设置绑定变量:P_GROUP_ID对应:APP_USER_GROUP_ID。

三、额外验证要点

  1. 确认会话语言生效:切换语言后,可通过调试模式查看APP_LANG变量值,或在页面添加显示项绑定apex_util.get_session_lang(),验证语言标识是否正确更新。
  2. 刷新菜单区域:语言切换提交后,需通过动态操作刷新菜单所在区域,或重新加载页面,确保新的SQL查询执行并渲染对应语言的标签。
  3. 适配阿拉伯语RTL布局:在应用「全球化」设置中,将ar-sa对应的文本方向设为「RTL」,页面元素会自动调整为从右到左的布局。

内容的提问来源于stack exchange,提问作者Ziad Adnan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 14:40:20