我正在nodeJS中编写一个应用程序 - 一个Facebook Messenger应用程序。
我的应用程序包含一个名为strings.js的模块,它主要用于存储公共字符串。任何时候我需要打印问候语或我从strings.js文件中提取的任何内容。 Strings.js看起来像这样:
/*
* This module exports common strings.
* */
'use strict';
module.exports = {
// Quick replies for user to choose age range
ageReplies:[
{
//Option 1 CODE
},
{
//Option 2 CODE
},
{
//Option 3 CODE
}],
// Quick replies for user to choose gender
genderReplies:[
{
//Option 1 CODE
},
{
//Option 2 CODE
},
{
//Option 3 CODE
}],
// 'greetingButtons' is used to create the buttons sent to a registered
// user during the greeting
greetingButtons: [
{
//BUTTON 1 CODE
},
{
//BUTTON 2 CODE
},
{
//BUTTON 3 CODE
}],
userAgeString: "How old are you?",
userGenderString: "What's your gender?",
userInitialGreetingString: "Hello there! I don't believe we've spoken before. You'll need to create a user profile, so let's do that now.",
userNamePromptString: "What would you like me to call you?",
userPrefNamePromptString: "Ok, what would you like me to call you instead? Type it below:",
userWelcomeGreetingString: "Welcome back! I am ready and willing to serve, as always!",
};
前两个"对象" (如果那是我们可以称之为的话)," ageReplies"和" GenderReplies"用于在询问用户性别和年龄时(在用户个人资料创建期间)在Facebook Messenger中生成快速回复。
接下来是" greetingButtons",用于创建按钮,这些按钮通过&#34发送给以前注册的用户?"接下来你想做什么?"消息。
最后,我有许多字符串用于问候用户,提示他们输入性别和年龄,等等。当我添加它们时会有更多这些。
我一直在考虑将这些单独的字符串放在一个对象中,例如:
stringData: {
userAgeString: "How old are you?",
userGenderString: "What's your gender?",
userInitialGreetingString: "Hello there! I don't believe we've spoken before. You'll need to create a user profile, so let's do that now.",
userNamePromptString: "What would you like me to call you?",
userPrefNamePromptString: "Ok, what would you like me to call you instead? Type it below:",
userWelcomeGreetingString: "Welcome back! I am ready and willing to serve, as always!",
},
这样做有什么好处吗?有什么意义吗?
另一个问题是,如果我DID使用这样的对象,是否可以将我的按钮和快速回复放入同一个对象中,例如如下所示:
stringData: {
ageReplies:[ /* Age reply code */ ],
genderReplies: [ /* Gender reply code */ ],
greetingButtons: [ /* Button code */ ],
userAgeString: "How old are you?",
userGenderString: "What's your gender?",
userInitialGreetingString: "Hello there! I don't believe we've spoken before. You'll need to create a user profile, so let's do that now.",
userNamePromptString: "What would you like me to call you?",
userPrefNamePromptString: "Ok, what would you like me to call you instead? Type it below:",
userWelcomeGreetingString: "Welcome back! I am ready and willing to serve, as always!",
},
这会有用吗?
编辑:只是为了澄清,我不是在谈论在我的主代码中有一个对象。我所谈论的对象将在strings.js
中答案 0 :(得分:1)
通常在编写涉及显示某种文本的程序时,我会将我的所有副本(最终发送给用户的文本)存储在自己的文件中。这些文本块有一个像你所做的变量名,这使我可以在系统周围引用它们。
为什么我这样做?国际化(通常缩写为i18n)。
通常的做法是将显示的文本从应用程序的其余部分中分离出来,以便您可以轻松地为文本创建多个文件,并根据用户语言设置(或区域设置)从正确的文件加载。
在这种情况下,每个口语都有一个字符串文件,其中变量名称都是相同的。然后根据设置/区域设置从特定文件中进行选择。
仅凭这个原因,我将我的所有文本与应用程序的其余部分分开。当它是基于HTML的项目等时,这不起作用,但是像nodejs服务器端错误这样的东西消息,它完美地运作。
就个人而言,当我制作机器人时,选项(按钮)的数量与我使用的文本无关。因此,我创建不同选项的代码会在其他地方发生,但会使用我的i18n模块提供的字符串。这样文本和按钮很好地分离。按钮创建通常发生在一个函数中,该函数采用某种对象数组来表示每个按钮的选项,然后我会在创建最终按钮标记时从我的i18n文件中提取文本。
旁注:我也没有标注像“字符串”前缀或后缀这样的内容,指的是i18n.welcomeGreeting
或welcomeGreeting
这样的东西,我发现这不仅仅是明确的东西。
<强>铊组成; dr 强>
现在它不会产生太大的影响,但如果您的应用程序可能在将来增长,那么将文本与按钮创建分离可以带来有用的好处。它通常也可以更容易使用,并将按钮与文本分开。毕竟,你并不总是在聊天机器人中使用这两者,所以它们可能应该是单独的问题。