使用Eclipse在PHP中处理阿拉伯语字符串

9

我目前正在进行网站的本地化工作,该网站最初只有英文。第三方公司完成了翻译,并提供给我们一份包含翻译的Excel文件。我成功将其转换为PHP数组,可以在我的视图中使用。我使用Windows上的Eclipse编辑我的PHP文件。

一切都很好,只是我需要在字符串中添加变量,例如:

'%1 is now following %2'

在阿拉伯语中,我收到了类似以下的字符串:
'_______الآن يتتبع _______'

我发现将__替换为%1和%2非常困难,因为阿拉伯部分是从右往左的字符串,并且%1%2会被认为是从左到右或从右到左,我不确定。我很难按照我的参数顺序得到预期结果,因为%1有时会出现在字符串的左侧,有时在右侧,这取决于我开始输入的位置。复制粘贴替换字符串也可能产生相同奇怪的效果。

大多数时候,我最终得到的字符串是这样的:

%2الآن يتتبع %1

%1 应该在右侧,%2 应该在左侧。显然 %1 是从右到左的字符串,因为 % 出现在右边。%2 被认为是从左到右的。

我相信有人遇到过这个问题。有没有办法可以在 Eclipse 中轻松完成?或者使用更智能的编辑器处理阿拉伯语问题?或者可能是 Windows 的问题?有没有解决方法?

更新

我也尝试将字符串拆分为多个字符串,但这也会改变参数的顺序:

'%1' . 'الآن تتبع' . '%2'

更新2

更改替换字符串似乎可以改善情况。这可能与阿拉伯字符串中数字的处理方式有关。该字符串在Eclipse中进行了编辑而没有出现任何问题。参数顺序正确,PHP正确地处理了该字符串:

'{var2} الآن يتتبع {var1}'

如果没有其他解决方案,这可能是一个很好的选择。

我正在使用希伯来语进行编程,这也是R-T-L,根据我的经验,在数据库中处理所有数据要容易得多。然而,大多数IDE并不支持这些语言。为什么不尝试在数据库内处理数据呢? - Nadav S.
作为一个阿拉伯语使用者,我经常接到本地化任务。虽然我没有特别遇到这个问题,但在编辑时我遇到了许多从左到右/从右到左的问题。我使用Notepad++取得了成功。有没有关于此替换的规则?也许可以编写脚本来解决。 - Adi
@NadavS。我试图避免使用数据库,因为我想避免这个不必要的步骤。如果我们实现新功能时需要新的翻译,我只需将我的Excel文件发送给本地化公司即可。我不必将我的数据库导出到Excel文件中,然后将其发送给公司,再重新导入文件。实际上,我刚刚尝试在Navicat中编辑相同的字符串,但遇到了相同的问题。 - Tchoupi
@Adnan 我必须手动在字符串中添加占位符。我认为这不能被脚本化,因为大多数情况下参数的顺序会相反(%1 在右边),但这取决于含义。我会尝试使用notepad++,感谢您的建议。 - Tchoupi
将您的 Eclipse 编码更改为支持 UTF-8。然后它就可以工作了! - insomiac
显示剩余3条评论
3个回答

5
作为一个阿拉伯语使用者,我经常负责本地化任务。虽然我没有遇到这个特别的问题,但在编辑时我遇到了许多从左到右/从右到左的问题。我成功地使用Notepad++解决了这些问题。
当我想要编辑阿拉伯文本时,我通常会执行以下步骤:
  1. 打开空白的Notepad++ *
  2. 将编码设置为UTF-8 (Encoding -> Encoding in UTF-8)
  3. 启用RTL模式 (View -> Text Direction RTL)
  4. 粘贴你的字符串
下面是一张截图,展示了我如何编辑你的字符串: enter image description here *:由于某种原因,每当我打开一个已存在的文件时,情况就会变得很糟糕。所以也许我有点迷信,但这对我总是有效的。 更新:第一次我进行此操作时感到怀疑,因为字符串看起来不对,但后来我做了这个:
print_r(str_split($string));

我看到它们确实按照正确的顺序排列。

@MathieuImbert,我第一次也遇到了同样的问题。它看起来是错误的(等你把它复制回你的IDE,它会变得很糟糕),但实际上它是正确的。第一次我这样做时,我不得不逐个打印我的字符串char,才能相信它是按正确的顺序排列的。编辑:实际上这是一个好主意,我会更新答案。 - Adi
也许你是对的。Mathieu is now following Best photos 翻译成 Mathieu现在正在关注Best photos?在我看来,参数顺序是相反的。 - Tchoupi
@MathieuImbert,是的,翻译是正确的(嗯,不完全正确,应该是يتابع而不是يتتبع)。但是关于您已经拥有的字符串,是的。 - Adi
谢谢您的纠正。我用谷歌翻译检查了一下,您是对的,它没有意义。如果您感兴趣,我可能已经找到了一个解决方案。请查看更新2。如果您知道发生了什么,我会很高兴知道。 - Tchoupi
@MathieuImbert,现在你提到数字的事情,我刚想起来。阿拉伯数字(我们称之为“英文数字”)与阿拉伯字母混合是我遇到的最棘手的问题。事实上,我记得做过一些事情,比如用拉丁字母替换数字,然后再将它们替换回来,以停止RTL混淆。祝贺你找到了另一种选择。 - Adi
显示剩余2条评论

3

@Adnan 帮助我意识到并确认了在混合使用拉丁数字和阿拉伯文本时存在问题。

基于这个结论,解决方案很简单,就是停止使用 %1%2%3 等作为占位符。相反,我将使用更具描述性的关键字,例如 {USER}{ALBUM}{PHOTO} 等。

这样在 PHP 文件中可以显示预期结果,并且很容易进行编辑:

'ar' => '{USER} الآن يتابع {ALBUM}'

0

我更喜欢使用原始的记事本完成这种任务。

  1. 打开记事本,确保在LTR模式下
  2. 键入%1
  3. 通过按CTRL + SHIFT将模式更改为RTL
  4. 将阿拉伯字符串粘贴到编辑器中。
  5. 再次按CTRL + SHIFT将其恢复为LTR。
  6. 键入%2
  7. 使用CTRL + A选择所有内容,并使用CTRL + C进行复制
  8. 将其粘贴到IDE中。它应该看起来很奇怪,但实际执行效果是正确的。

使用记事本的原因: 更复杂的编辑器(如Notepad ++,Sublime,Coda(Mac)和一些IDE - 在您的情况下是Eclipse),可能不会使用正确的编码,而记事本则简单且适用于多语言任务。


感谢描述了确切的步骤。它与Adnan的解决方案产生完全相同的结果。参数似乎是反向排列的。 - Tchoupi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接