BYVoid / OpenCC

Conversion between Traditional and Simplified Chinese
https://opencc.byvoid.com/
Apache License 2.0
8.49k stars 980 forks source link

關於 cli 版的 config 選項的一些建議 #845

Closed plum7x closed 3 months ago

plum7x commented 8 months ago

在 windows 中使用 opencc 只能通過完整路徑指定 config,否則只能把工作目錄設定到 config 目錄。也就是需要一個放置 config 的固定位置,以避免需要指定 config 的完整路徑的情況。

例如優先使用 opencc.exe 所在目錄下的 config -c s2t.json

  1. "opencc.exe 所在目錄\s2t.json"
  2. "opencc.exe 所在目錄\configs\s2t.json"

另外,希望允許使用 base name 指定 config 例如 -c s2t-c s2t.json

plum7x commented 6 months ago

FFmpeg 使用了一個環境變數 FFMPEG_DATADIR 來為其指定放置 preset 的目錄 這看起來是比較好的解決方案了

t1anchen commented 4 months ago

也遇到了類似的問題

version: opencc 1.1.7 os: win11, macos 12.7.5

如果 win 版本能夠自動 fallback 到一個默認的參數路徑,比如 ..\share\opencc\s2t.json 是不是會更易用?

plum7x commented 4 months ago

這裡提供一個方法以便於在 Windows 中使用

儲存下內容為 opencc.ps1

[string] $PROGRAM_FILE_PATH = 'build\bin\opencc.exe'
[string] $CONFIGS_DIR_PATH = 'build\share\opencc'
$newArgs = $args
$index = '-c', '--config' | % {$newArgs.IndexOf($_)} | ? {$_ -ge 0}
if ($index.Count -le 0) {
    $newArgs += @('-c')
    $newArgs += @('s2tw.json')
}
$index | % {$newArgs[$_+1] = [IO.Path]::Combine($CONFIGS_DIR_PATH, $newArgs[$_+1])}
$input | & $PROGRAM_FILE_PATH @newArgs
exit $LASTEXITCODE

使用 opencc.ps1

PS >$OutputEncoding = New-Object System.Text.UTF8Encoding $False
PS >Get-Content input.txt -Encoding UTF8 | & opencc.ps1 -o output.txt

若想使用 opencc.exe 為命令而不是 opencc.ps1 或 opencc,則可以使用 Win-PS2EXE 將 ps1 檔轉為 exe 格式

希望將來能看到看到從根本解決此問題

BYVoid commented 3 months ago

1.1.8版本加入了 --path.