我在Python中创建一个简单的迷你语言解析器,在问题域附近进行编程以及所有这些.
无论如何,我想知道这里的人们会如何做到这一点 - 在Python中做这种事情的首选方式是什么?
我不会详细说明我所追求的内容,因为目前我只是在研究整个领域在Python中的容易程度.
感谢您的输入!
在我试图帮助的网站上,用户可以在浏览器中输入一个URL,如下面的汉字,
http://localhost:8080?a=??
Run Code Online (Sandbox Code Playgroud)
在服务器上,我们得到
GET /a=%E6%B5%8B%E8%AF%95 HTTP/1.1
Run Code Online (Sandbox Code Playgroud)
如您所见,它是UTF-8编码,然后是URL编码.我们可以通过在Tomcat中将编码设置为UTF-8来正确处理.
但是,有时我们在某些浏览器上获得Latin1编码,
http://localhost:8080?a=ß
Run Code Online (Sandbox Code Playgroud)
变成
GET /a=%DF HTTP/1.1
Run Code Online (Sandbox Code Playgroud)
无论如何在Tomcat中正确处理这个问题?看起来服务器必须做一些智能猜测.我们不希望100%正确处理Latin1,但是假设一切都是UTF-8,那么任何东西都比我们现在做的要好.
服务器是Tomcat 5.5.支持的浏览器是iPhone 6 +,Firefox 2+和iPhone上的Safari.
在i18n rails应用程序中本地化图像(按钮和其他内容)的最佳方法是什么?
我正在使用Mercurial作为VCS为不同客户开展项目.我知道如何设置默认用户,但是为每个项目设置不同的用户是否有意义?
我有文件locale/es/LC_MESSAGES/django.mo(和.po),运行makemessages和compilemessages.绝对是所有消息都被翻译
在settings.py中有:
USE_I18N = True
LANGUAGE_CODE = 'es'
Run Code Online (Sandbox Code Playgroud)
django仍然固执地从英文.po文件中获取字符串......为什么会这样?
一定有一些问题......谢谢.
编辑这似乎是这种情况,只有当LocaleMiddleware有效.
出于某种原因,subversion正在返回我认为是德语的错误消息:
# svn up .
svn: Zielpfad existiert nicht
Run Code Online (Sandbox Code Playgroud)
不幸的是,我不知道那种语言......在我使用在线翻译引擎来解决这个问题之前,我想我会尝试修复它.我想我只是在做一些非常简单的错误.我正在运行subversion 1.6.4通过yum安装在centos上(从具有相同问题的1.4.something升级).这是与CPanel混合的VPS.
据我所知,它试图加载英文信息并失败.我在strace输出中看到了这个:
open("/usr/share/locale/en_US/LC_MESSAGES/subversion.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/en/LC_MESSAGES/subversion.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
brk(0x4106d000) = 0x4106d000
open("/usr/share/locale/en_US/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/en/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
Run Code Online (Sandbox Code Playgroud)
正常的SVN命令是英文的(svn help,svn help up等),只是错误信息是德文的.就我所知,我一直都是这样使用机器而且我从来没有从Subversion得到错误信息......
:: locale
LANG=en_US
LC_CTYPE="en_US"
LC_NUMERIC="en_US"
LC_TIME="en_US"
LC_COLLATE="en_US"
LC_MONETARY="en_US"
LC_MESSAGES=en_US
LC_PAPER="en_US"
LC_NAME="en_US"
LC_ADDRESS="en_US"
LC_TELEPHONE="en_US"
LC_MEASUREMENT="en_US"
LC_IDENTIFICATION="en_US"
LC_ALL=
Run Code Online (Sandbox Code Playgroud)
我也跑:
export LC_MESSAGES=en_US
export LANG=en_US …
Run Code Online (Sandbox Code Playgroud) 脚本
Web服务器获取请求http://domain.com/folder/page
.在接受语言头告诉我们用户喜欢希腊,与语言代码el
.这很好,因为我们有希腊版的page
.
现在我们可以使用URL执行以下操作之一:
http://domain.com/folder/page
http://domain.com/folder/page/el
http://domain.com/el/folder/page
http://el.domain.com/folder/page
http://domain.com/folder/page?hl=el
哪一个最好?从用户的角度来看,优点,缺点?开发者视角?
首先,让我引用一篇来自"专家Python编程"一书的文章:
在下面的示例中,使用__init__方法调用其基类的C类将使B类被调用两次!
class A(object):
def __init__(self):
print "A"
super(A, self).__init__()
class B(object):
def __init__(self):
print "B"
super(B, self).__init__()
class C(A,B):
def __init__(self):
print "C"
A.__init__(self)
B.__init__(self)
print "MRO:", [x.__name__ for x in C.__mro__] #prints MRO: ['C', 'A', 'B', 'object']
C() #prints C A B B
Run Code Online (Sandbox Code Playgroud)
最后,这里是对这里发生的事情的解释:
这是由于A .__ init __(self)调用,它是由C实例进行的,因此使super(A,self).__ init __()调用B的构造函数.换句话说,super应该用于整个类层次结构.问题是有时这个层次结构的一部分位于第三方代码中.
我不知道为什么" super(A, self).__init__()
调用B的构造函数".请解释这一刻.非常感谢.
我有一个函数,它采用类似字符串的参数.
我想决定是否可以安全地存储参数并确保它不会改变.所以我想测试它是否可变,例如是否buffer()
构建的结果array.array()
.
目前我使用:
type(s) == str
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法呢?
(复制参数太昂贵了,这就是为什么我要避免它)
我一直听说过gettext - 我知道这是基于提供的字符串参数查找翻译的某种unix命令,然后生成一个.pot文件,但有人可以用外行的方式向我解释如何处理这个问题.一个网络框架?
我可能会考虑一些已建立的框架是如何做到的,但外行人的解释会有所帮助,因为它可能有助于在我真正钻研事物以提供我自己的解决方案之前更清楚一点.