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

如何在GitHub Windows运行器中安装测试区域设置以支持setlocale()

解决GitHub Windows运行器上Perl本地化测试的Locale问题

问题概述

为Sqitch添加的本地化测试要求POSIX setlocale()返回正确的UTF-8 locale值,Linux和macOS环境通过安装对应语言包即可正常运行,但Windows环境下设置LC_ALL=en-US.UTF-8时,Perl会提示locale未安装并回退到English_United States.1252编码。尝试使用Install-Language命令安装语言包时,因命令未被识别而失败。

解决方案

1. 使用DISM命令安装语言包(管理员权限)

GitHub Windows运行器基于Windows Server 2022,默认未预装LanguagePackManagement模块,因此无法直接使用Install-Language。改用DISM命令以管理员权限安装语言包,步骤如下:

在GitHub工作流中添加以下步骤:

- if: runner.os == 'Windows'
  name: Install UTF-8 Language Packs
  shell: powershell
  run: |
    # 以管理员身份运行DISM安装语言包
    $packages = @('fr-fr', 'en-us', 'de-de', 'it-it')
    foreach ($lang in $packages) {
        $pkg = Get-WindowsPackage -Online | Where-Object { $_.PackageName -like "*LanguagePack-$lang*" } | Select-Object -First 1
        if ($pkg) {
            Start-Process dism.exe -ArgumentList "/Online /Add-Package /PackagePath:`"$($pkg.PackagePath)`"" -Wait -NoNewWindow -Verb RunAs
        } else {
            Write-Warning "Language pack for $lang not found"
        }
    }

2. 启用UTF-8系统区域设置

Windows需要启用UTF-8全局语言支持才能让setlocale()识别en-US.UTF-8这类格式,在工作流中添加以下配置:

- if: runner.os == 'Windows'
  name: Enable UTF-8 System Locale
  shell: powershell
  run: |
    # 修改注册表启用UTF-8支持
    Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Nls\CodePage' -Name 'ACP' -Value 65001 -Type DWord
    Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Nls\CodePage' -Name 'OEMCP' -Value 65001 -Type DWord
    Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Nls\CodePage' -Name 'MACCP' -Value 65001 -Type DWord

3. 调整Perl测试步骤的环境变量

确保测试步骤的环境变量正确设置:

- run: perl -MPOSIX -E "say POSIX::setlocale(POSIX::LC_ALL)"
  env:
    LC_ALL: fr_FR.UTF-8
    LANG: fr_FR.UTF-8
  shell: powershell

完整工作流示例

name: Test setlocale
on: [push]
jobs:
  test:
    name: Test setlocale
    runs-on: windows-latest
    steps:
      - uses: actions/checkout@v4
      - uses: shogo82148/actions-setup-perl@v1
        with:
          perl-version: latest
      - name: Install UTF-8 Language Packs
        shell: powershell
        run: |
          $packages = @('fr-fr', 'en-us', 'de-de', 'it-it')
          foreach ($lang in $packages) {
              $pkg = Get-WindowsPackage -Online | Where-Object { $_.PackageName -like "*LanguagePack-$lang*" } | Select-Object -First 1
              if ($pkg) {
                  Start-Process dism.exe -ArgumentList "/Online /Add-Package /PackagePath:`"$($pkg.PackagePath)`"" -Wait -NoNewWindow -Verb RunAs
              } else {
                  Write-Warning "Language pack for $lang not found"
              }
          }
      - name: Enable UTF-8 System Locale
        shell: powershell
        run: |
          Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Nls\CodePage' -Name 'ACP' -Value 65001 -Type DWord
          Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Nls\CodePage' -Name 'OEMCP' -Value 65001 -Type DWord
          Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Nls\CodePage' -Name 'MACCP' -Value 65001 -Type DWord
      - run: perl -MPOSIX -E "say POSIX::setlocale(POSIX::LC_ALL)"
        env:
          LC_ALL: fr_FR.UTF-8
          LANG: fr_FR.UTF-8

关键说明

  • DISM命令需要管理员权限,通过Start-Process的-Verb RunAs参数实现
  • 修改注册表启用UTF-8后,GitHub Actions环境中通常无需额外重启即可生效
  • Windows的语言包名称格式为LanguagePack-xx-xx,需对应目标locale的小写格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 14:23:19