【问题标题】:How to compare localized strings in Smalltalk?如何比较 Smalltalk 中的本地化字符串?
【发布时间】:2021-01-19 08:08:46
【问题描述】:

是否可以在一些 Smalltalk 实现中比较本地化字符串?到目前为止我遇到的唯一一个是 Pharo 和 GNU ST,它们似乎缺乏这种能力。似乎唯一的可能性是从头开始编写 ICU 包装器。 (这远远超出了我的经验。)

我知道这是一个复杂的功能。不幸的是,它在任何地方都经常需要,例如,在网络应用程序中对菜单进行排序。

我的意思是:

'á' > 'a' => true

以及使用比较对字符串数组进行排序的可能性:

#('č' 'ř' 'a' 'r' 'á') asSortedCollection => #('a' 'á' 'č' 'r' 'ř')

【问题讨论】:

    标签: string-comparison smalltalk pharo


    【解决方案1】:

    我不会说其他方言,但GemStone 确实有这个能力:

    topaz 1> run
    'á' > 'a'
    %
    true
    topaz 1> run
    #('č' 'ř' 'a' 'r' 'á') asSortedCollection printString
    %
    aSortedCollection( 'a', 'á', '\u010d', 'r', '\u0159')
    topaz 1> 
    

    详情请见Programmer's Guide

    【讨论】:

      【解决方案2】:

      应该可以直接从 NativeBoost(Pharo 4 中使用的旧 FFI 样式)转换为 UFFI。代码是on the gemstone repo。最简单的方法是 首先确保您可以在启动器中使用已弃用的版本运行旧的 Pharo 4,并验证它是否适合您。您可能需要安装 32 位库才能使其正常工作(或使用类似 32 位虚拟盒映像的东西)。在 Pharo 8 中加载独立于 NativeBoost 的包。有一个关于 UFFI 的booklet

      【讨论】:

      • 很遗憾,我仍然找不到 4.0 虚拟机。无论如何,将这种能力理所当然地融入基本形象中,那将是非常棒的。对于非英语语言的动态网络应用程序,人们很快就会发现这种需求。
      • 要轻松加载,您需要更早的 Pharo: 2.0 您可以在同一个地方找到它
      【解决方案3】:

      我可以说Smalltalk/X-jv branch 方言。如果我没记错的话,Smalltalk/X 本身就是 Unicode。

      你的例子自然会给出你的结果。这是来自Workspace 的直接粘贴(在打印值之间添加一个空格以提高可读性):

      'á' > 'a' true.
      
      #('č' 'ř' 'a' 'r' 'á') asSortedCollection SortedCollection('a' 'r' 'á' 'č' 'ř')   
      

      【讨论】:

        猜你喜欢
        • 2013-03-04
        • 1970-01-01
        • 2012-04-29
        • 2021-11-21
        • 2013-02-21
        • 2020-01-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多