我的问题是:使用MonoDevelop(这是我正在处理的许多项目的首选环境)我正在试图弄清楚如何使用资源文件来处理本地化消息以及如何将它们正确地包含在项目中作为嵌入式资源.
我的目标是为消息键及其值创建一个具有简单名称 - 值对的资源文件,并为其本地化字符串提供单独的文件,例如
Messages.resources
Hello.World = Hello World
Goodbye.Cruel.World = Goodbye, Cruel World
Run Code Online (Sandbox Code Playgroud)
Messages.de.resources
Hello.World = Hallo Welt
Goodbye.Cruel.World = Auf Wiedersehen, grausame Welt
Run Code Online (Sandbox Code Playgroud)
我有几个问题.
首先,MonoDevelop的.resources文件和Visual Studio的资源概念之间有什么区别(如果有的话).据我所知,MonoDevelop(和SharpDevelop)允许您创建.resources文件,而Visual Studio使用.resx文件并通过resgen实用程序将它们编译成.resources文件(二进制文件类型).在MonoDevelop中使用资源时,我是否需要使用resgen编译我的资源(例如Messages.resources)?当我尝试使用MonoDevelop允许我通过他们的向导创建的直接.resources文件时,我收到以下错误:
"Stream不是有效的资源文件."
其次,一旦我有一个适当生成的资源文件,我就可以将它们嵌入到我的项目中,如果我理解正确,它会使资源成为程序集的一部分.如果我有两个文件,Messages.resources和Messages.de.resources,MonoDevelop(至少)在嵌入它们时为它们分配相同的ID值.我是否需要在项目中包含我的默认本地化,然后为每个受支持的区域设置单独的项目?接下来,C#如何区分我的Messages.resources和Messages.de.resources文件(或者它们是什么文件)?
我目前正在尝试使用以下代码解析我的消息资源:
...
public string Translate(string messageKey, CultureInfo cultureInfo) {
ResourceManager resourceManager = new ResourceManager("My.Project.Messages", Assembly.GetExecutingAssembly());
string message = resourceManager.GetString(messageKey, cultureInfo);
return message;
}
...
Run Code Online (Sandbox Code Playgroud)
我觉得我在C#的国际化/本地化/全球化等方面缺少一些基本要点.我之前曾在Java上从事过国际化项目,但出于某种原因,我无法用C#来解决它.
另外,作为一个旁边 - 国际化项目中资源的"首选"目录结构是什么?
我的问题:
Symfony 2是否支持PATCH
请求或任何类型的部分表单内容提交?如果是这样,是否有"正确"(或更准确地说是"首选")的方式来做到这一点?
除了PRE_BIND
(见下文)事件方法,还有其他模式或方法来解决这个问题吗?如果还有其他方法可以解决这个问题,那么它们中的任何一个都被认为比其他方法更好或更差吗?
到目前为止我发现/完成的内容:根据Github上的拉取请求(#5576),已完成支持Symfony 2中部分表单绑定的工作(根据我的理解,针对Symfony 2.2).但是,我找不到该pull请求之外的任何文档或示例,指示如何使用部分表单绑定.
我发现的一个解决方案可能适合我的目的.方法是将事件订阅者附加到PRE_BIND
事件的表单类型,粗略搜索stackoverflow产生以下答案,类似于我目前使用的答案:https://stackoverflow.com/a/11687863/657674.
我有一个运行PHP-FPM的PHP服务器,它通过端口上的nginx与fastcgi一起提供7000
.此应用程序已停靠,并作为正在运行的容器运行,例如my_api.
的my_api
搬运工容器可以连接到直接经由端口7000
(对于健全检查),以及通过其充当nginx的反向使用上行流以暴露代理另一个容器my_api
上的端口的应用程序(和其它)80
和443
(端口80
重定向到SSL)通过proxy_pass
指令在适当的位置.
如果我在端口上使用dbgp9000
直接针对从http:// localhost:7000提供的文件启动XDebug会话,我可以看到调试会话已正确建立,我可以调试.
但是,如果我尝试针对nginx反向代理服务的URL启动XDebug会话,例如https:// localhost/my-api,则调试会话似乎没有启动,或者至少它没有正确创建连接(我的IDE中没有出现断点等).
如何为通过nginx反向代理发出的请求建立XDebug会话?
出于此问题的目的,下面是我的docker-compose.yml
配置的(相关)示例,并且xdebug.ini
:
docker-compose.yml:
version: "2"
services:
api:
build: <path_to_dockerfile>
ports:
- 7000:7000
#- 9000:9000 # may be uncommented for direct debugging access
nginx_proxy:
build: <path_to_dockerfile>
links:
...
- api:api
ports:
- 80:80
- 443:443
Run Code Online (Sandbox Code Playgroud)
xdebug.ini
zend_extension=xdebug.so
xdebug.remote_enable=true
xdebug.remote_connect_back=1
xdebug.remote_port=9000
xdebug.remote_handler=dbgp
xdebug.remote_autostart=0
Run Code Online (Sandbox Code Playgroud)
注意:我尝试了几种不同的配置来尝试使其工作,包括启动运行dbgpproxy …
我很好奇,在所有可能的C#.NET反转控制解决方案中,如果有人曾经尝试过Dynamo IoC(http://www.dynamoioc.com/)以及它是否适用于为MonoTouch设计的项目和MonoDroid?
虽然我没有明确使用MonoTouch或MonoDroid,但我使用的是Unity 3D(http://www.unity3d.com).我希望如果一个IoC框架(例如Dynamo)在MonoTouch和MonoDroid上工作,它很可能也会满足我对Unity 3D的需求.
注意:我一直在研究控制容器的反转,以及它们与MonoTouch,MonoDroid等的兼容性,现在已经有几天了; 这个问题不是来自懒惰,而是我在研究具体关于Dynamo IOC及其与MonoTouch,MonoDroid等的兼容性时发现的细节缺乏.
dependency-injection inversion-of-control unity-game-engine xamarin.ios xamarin.android
Doctrine Migrations项目是否与Doctrine MongoDB兼容?
我不清楚搜索和查看Doctrine Migrations项目是否与ODM解决方案(例如MongoDB)以及ORM解决方案兼容.
如果是,有人可以建议如何将两者结合使用的例子或文章吗?
如果不是,是否有合理的替代方案?
我简单地理解将文档的数据从一个版本的文档迁移到另一个版本的不同方法以及每个版本的优缺点.
我倾向于实现这里建议的渐进模式更改和迁移脚本的混合方法.利用Doctrine的MongoDB库中的功能,Jonathan Wage在他的帖子中写道:Doctrine MongoDB ODM Schema Migrations.
即便如此,我需要找到一些创建迁移脚本或执行数据迁移的方法,而Doctrine Migrations似乎是一个不错的首选.
另外,另一个用户警告不要使用上面提到的Jonathan Wage方法来迁移数据,而是直接针对数据库运行命令(JavaScript?).
在 Symfony 2有关翻译的文档中,所有 XLIFF 示例似乎都用作文件file.ext
属性original
。来自 XLIFF 1.2 的文档:
原始文件- 原始属性指定从中提取元素内容的原始文件的名称。
在 Symfony 2 的例子中,我不相信我们实际上正在提取任何内容进行翻译,但该original
属性是必需的。Symfony 2 的文档中从未解释过的用法file.ext
,无论它只是一个占位符并被忽略,还是它是否需要指向一个实际文件。我最好的猜测是它被 Symfony 2 忽略,但我还没有机会做任何测试或深入研究代码。
第二个问题:messages.default.yml
指定一组默认翻译(例如,将其用作导出 XLIFF 翻译的原始文件)是否合适?
当谈到用于 Web 应用程序的翻译时,XLIFF 似乎有点矫枉过正......
我正在寻找一种将 TimelineJS 与 RequireJS 的 AMD 实现结合使用的方法。我可以让事情部分工作,例如
define(["storyjs", "timelinejs", ...], function(storyjs, timelinejs, ...) {
createStoryJS({
type: 'timeline',
width: '800',
height: '600',
source: { ... }, // sample JSON
embed_id: 'timeline-embed'
});
});
Run Code Online (Sandbox Code Playgroud)
上面生成了一个时间线,但是storyjs
(在我的 RequireJS 配置中导出VMM
)总是尝试执行自己的 TimelineJS 库加载,这总是会在 Firebug/开发人员工具控制台中产生错误。
我要么寻找一种以编程方式构建 TimelineJS 对象的方法(我找不到任何示例),要么告诉 StoryJS 不要使用其机制加载库(因为我已经提供了它们),并且通常集成 TimelineJS使用 AMD 解决方案。
有什么建议么?
更新:
使用的 RequireJS 配置如下。为了我个人的使用,我倾向于重命名 JS 库并附加它们的版本号。
var require = {
waitSeconds: 5,
paths: {
"app": "../js/app"
// ** Libraries
,"backbone": "../js/lib/backbone-1.1.0.min"
,"bootstrap": "../js/lib/bootstrap-3.0.2.min"
,"jquery": "../js/lib/jquery-1.10.2.min"
,"jquery-ui": "../js/lib/jquery-ui-1.10.3.min"
,"json2": "../js/lib/json2" …
Run Code Online (Sandbox Code Playgroud) 据我所知,有几种方法可以让MonoGame的程序集进入MonoGame项目:
这三个选项有什么区别?它们如何相互关联?它们应该如何用于项目?
关于库的混淆的一个很好的例子可以MonoGame.Binaries
在安装程序安装的程序集的示例中找到.MonoGame.Binaries
似乎没有提供与安装程序相同的粒度级别,至少据我所知; 例如:
MonoGame.Binaries
NuGet包中你只有:MonoAndroid,MonoMac,MonoTouch,net40,netcore和wp8.对我来说,它看起来像Monogame.Binaries包是过时的,但如果它不是,我想建立一个适当的Linux
,WindowsGL
和/或DirectX Windows
使用NuGet包的便利项目,我会简单地选择net40对于DirectX平台的前两个和netcore?
(注意:在某种程度上,我确实理解的目的MonoGame.Portable
是创建一个更清晰的代码库,更多的代码重用是独立于平台的,但它与其他库源的比较和对比的作用仍然相当模糊对我来说.)
php ×3
symfony ×3
c# ×2
amd ×1
docker ×1
forms ×1
javascript ×1
localization ×1
mongodb ×1
monodevelop ×1
monogame ×1
nginx ×1
nuget ×1
partial ×1
patch ×1
requirejs ×1
resources ×1
timeline.js ×1
xamarin.ios ×1
xdebug ×1
xliff ×1