Mac App名字支持多语言显示

先进工具就是生产力。

最近发现又被XE4坑了一把,工程名称必须为英文,如果是中文,输出对应的app也是中文,在10.10以下的版本中都能正常运行,但是到了10.10就无法启动了。【XE7出来的就都可以,无奈无法升级到新版本】

纠结了很久,如何找到一个两全其美的方法呢?

====================================最新更新========================================

注:目前已知道中文问题,是奇数个中文汉字名称的App在某些系统中获取其路径会出现乱码,这又是XE4的Bug,XE4的后续版本中获取路径函数是这样子的:

<pre name="code" class="plain">
function ParamStr(Index: Integer): string;
{$IFDEF MSWINDOWS}
var
  P: PChar;
  Buffer: array[0..260] of Char;
begin
  Result := '';
  if Index = 0 then
    SetString(Result, Buffer, GetModuleFileName(0, Buffer, Length(Buffer)))
  else
  begin
    P := GetCommandLine;
    while True do
    begin
      P := GetParamStr(P, Result);
      if (Index = 0) or (Result = '') then Break;
      Dec(Index);
    end;
  end;
{$ENDIF MSWINDOWS}
{$IF defined(LINUX) or defined(MACOS) or defined(ANDROID)}
begin
  if Index < ArgCount then
   <span style="color:#ff0000;"> Result := UTF8ToString(PAnsiCharArray(ArgValues^)[Index])</span>
  else
    Result := '';
{$ENDIF LINUX or MACOS or ANDROID}
end;

XE4中是这样子的:

function ParamStr(Index: Integer): string;
{$IFDEF MSWINDOWS}
var
  P: PChar;
  Buffer: array[0..260] of Char;
begin
  Result := '';
  if Index = 0 then
    SetString(Result, Buffer, GetModuleFileName(0, Buffer, Length(Buffer)))
  else
  begin
    P := GetCommandLine;
    while True do
    begin
      P := GetParamStr(P, Result);
      if (Index = 0) or (Result = '') then Break;
      Dec(Index);
    end;
  end;
{$ENDIF MSWINDOWS}
{$IF defined(LINUX) or defined(MACOS)}
begin
  if Index < ArgCount then
  <span style="color:#ff0000;">  Result := string(PAnsiCharArray(ArgValues^)[Index])</span>
  else
    Result := '';
{$ENDIF LINUX or MACOS}
end;

修改System.pas单元无果后,就直接弃用了ParamStr这个函数,直接用UTF8ToString(System.ArgValues^))替代

============================================================================




后来发现也Ios app的原理是一样的,XE中可以用 CFBundleDisplayName 去设定对应的显示名称,但是XE做的很不完备,完全没考虑Mac App开发人员的感受,必须要手动去完成类似的配置,IDE中配置仅仅是针对手机的。


  1. 在工程目录下创建二个文件夹(zh_CN.lproj)文件(InfoPlist.strings)及内容:
    • zh_CN.lproj
      • InfoPlist.strings
      • CFBundleName = "中文测试";
        CFBundleDisplayName = "中文测试";

      2、Deployment 设定发布目录到Resources中的对应目录中


参考:http://www.cnblogs.com/onechen/p/4431743.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值