1
- [ releaseImg ] : https://img.shields.io/github/v/release/yusshu/lang-lib .svg?label=github%20release
2
- [ release ] : https://github.com/yusshu/lang-lib /releases/latest
1
+ [ releaseImg ] : https://img.shields.io/github/v/release/yusshu/nmessge .svg?label=github%20release
2
+ [ release ] : https://github.com/yusshu/nmessage /releases/latest
3
3
4
- # JLL (Java Language Library) [ ![ releaseImg]] [ release ] [ ![ Build Status] ( https://travis-ci.com/yusshu/lang-lib .svg?branch=master )] ( https://travis-ci.com/yusshu/lang-lib )
4
+ # NMessage [ ![ releaseImg]] [ release ] [ ![ Build Status] ( https://travis-ci.com/yusshu/nmessage .svg?branch=master )] ( https://travis-ci.com/yusshu/nmessage )
5
5
6
6
A simple and a bit abstract library to handle messages with multilanguage support.
7
7
I have seen many things in languages that I do not understand, to avoid this, I bring here a library for multilanguage and easy to obtain messages from configuration files or from any other place
8
8
9
9
## Usage
10
10
11
- First, build a ` MessageProvider ` with a pretty builder.
11
+ First, build a ` MessageHandler ` with a pretty builder.
12
12
Assuming that ` Thing ` is the receiver of the messages, who also has some properties and its language
13
13
| | Specification | Implementation |
14
14
| ---------------------------| -----------------------------------------------------------------------------------| ----------------------------------------------------------------------------------------------------------------------------------|
@@ -31,21 +31,21 @@ MessageRepository repository = MessageRepository.builder()
31
31
)
32
32
.setNodeFileLoader(nodeFileLoader)
33
33
.setFileFormat(" messages_%lang%.properties" )
34
+ .setDefaultLanguage(" en" )
34
35
.build();
35
36
36
- MessageProvider <Thing > messageProvider = MessageProvider . < Thing > builder()
37
+ MessageHandler <Thing > messageProvider = MessageHandler . builder(Thing . class )
37
38
.setRepository(repository)
38
- .setDefaultLanguage(" en" )
39
- .build();
39
+ .build();
40
40
```
41
41
NodeFileLoader implementation: (for Bukkit) [ YamlFileLoader] ( https://github.com/yusshu/lang-lib/blob/master/bukkit/src/main/java/me/yushust/message/format/bukkit/yaml/YamlFileLoader.java ) , and NodeFileWrapper: [ YamlConfigurationWrapper] ( https://github.com/yusshu/lang-lib/blob/master/bukkit/src/main/java/me/yushust/message/format/bukkit/yaml/YamlConfigurationWrapper.java )
42
42
NodeFileLoader implementation for Properties: (Built in) [ PropertiesFileLoader] ( https://github.com/yusshu/lang-lib/blob/master/core/src/main/java/me/yushust/message/core/holder/defaults/PropertiesFileLoader.java ) , and NodeFileWrapper: [ PropertiesNodeFile] ( https://github.com/yusshu/lang-lib/blob/master/core/src/main/java/me/yushust/message/core/holder/defaults/PropertiesNodeFile.java )
43
43
## Getting messages
44
44
45
- There are ** two ways** to get messages: using the propertyHolder and using the language.
45
+ There are ** two ways** to get messages: using the entity and using the language.
46
46
Using the language doesn't call ` MessageInterceptor ` s nor ` PlaceholderProvider ` s.
47
47
48
- Using the property holder :
48
+ Using the entity :
49
49
``` java
50
50
Thing thing = ... ;
51
51
String message = messageProvider. getMessage(thing, " message.path" );
@@ -63,12 +63,11 @@ Implementing `LanguageProvider` is **very simple**, you just have to implement a
63
63
``` java
64
64
public class ThingLanguageProvider implements LanguageProvider<Thing > {
65
65
66
- @Override
67
- @Nullable
68
- public String getLanguage (Thing thing ) {
69
- return thing. getLanguage();
70
- }
71
-
66
+ @Override
67
+ @Nullable
68
+ public String getLanguage (Thing thing ) {
69
+ return thing. getLanguage();
70
+ }
72
71
}
73
72
```
74
73
Using lambda method references (Java 8+):
@@ -77,10 +76,10 @@ LanguageProvider<Thing> thingLanguageProvider = Thing::getLanguage;
77
76
```
78
77
Registering your ` LanguageProvider ` :
79
78
``` java
80
- MessageProvider <Thing > messageProvider = MessageProviderBuilder . create ()
81
- .setRepository(repository)
82
- .setLanguageProvider(new ThingLanguageProvider ())
83
- .build();
79
+ MessageHandler <Thing > messageProvider = MessageHandler . builder ()
80
+ .setRepository(repository)
81
+ .setLanguageProvider(new ThingLanguageProvider ())
82
+ .build();
84
83
```
85
84
## Intercepting messages
86
85
@@ -90,42 +89,34 @@ Intercepting messages is as easy as modifying a String, we just implement `Messa
90
89
** Examples:**
91
90
A name placeholder provider
92
91
``` java
92
+ @ProviderIdentifier (" thing" )
93
93
public class ThingPlaceholderReplacer implements PlaceholderProvider<Thing > {
94
-
95
- @Override
96
- public String [] getPlaceholders () {
97
- return new String [] {" name" };
98
- }
99
-
100
- @Override
101
- public String replace (InterceptContext<Thing > context , String placeholder ) {
102
- return context. getEntity(). getName();
103
- }
104
-
94
+ @Override
95
+ public String replace (MessageRepository repository , Thing entity , String placeholder ) {
96
+ return entity. getName();
97
+ }
105
98
}
106
99
```
107
100
Registering the ` PlaceholderProvider ` :
108
101
``` java
109
- MessageProvider <Thing > messageProvider = MessageProviderBuilder . create ()
110
- .setRepository(repository);
111
- .addProvider(new ThingPlaceholderProvider ())
112
- .build();
102
+ MessageRepository <Thing > messageProvider = MessageRepository . builder ()
103
+ .setRepository(repository);
104
+ .addProvider(new ThingPlaceholderProvider ())
105
+ .build();
113
106
```
114
107
115
108
## Sending messages with MessageConsumer
116
109
117
- You can use ` MessageProvider ` to ** send messages** , but this only works if you have previously specified a ` MessageConsumer `
110
+ You can use ` MessageHandler ` to ** send messages** , but this only works if you have previously specified a ` MessageConsumer `
118
111
119
112
** Implementing MessageConsumer:**
120
113
It simply takes care of sending the already formatted message.
121
114
``` java
122
115
public class ThingMessageConsumer implements MessageConsumer<Thing > {
123
-
124
- @Override
125
- public void sendMessage (Thing receiver , String message ) {
126
- receiver. sendMessage(message);
127
- }
128
-
116
+ @Override
117
+ public void sendMessage (Thing receiver , String message ) {
118
+ receiver. sendMessage(message);
119
+ }
129
120
}
130
121
```
131
122
Or using lambda method references (Java 8+)
@@ -134,10 +125,10 @@ MessageConsumer<Thing> messageConsumer = Thing::sendMessage;
134
125
```
135
126
Registering your MessageConsumer:
136
127
``` java
137
- MessageProvider <Thing > messageProvider = MessageProviderBuilder . create ()
138
- .setRepository(repository)
139
- .setMessageConsumer(new ThingMessageConsumer ())
140
- .build();
128
+ MessageHandler <Thing > messageProvider = MessageHandler . builder ()
129
+ .setRepository(repository)
130
+ .setMessageConsumer(new ThingMessageConsumer ())
131
+ .build();
141
132
```
142
133
143
134
** Sending the message**
151
142
List<Thing > things = ... ; // it can be any iterable (Collection, etc)
152
143
messageProvider. sendMessage(things, " message.path" );
153
144
```
154
- And using a just-in-time interceptor:
155
- ``` java
156
- List<Thing > things = ... ;
157
- messageProvider. sendMessage(things, " message.path" , message - > {
158
- return message. replace(" {{things}}" , String . valueOf(things. size()));
159
- });
160
- ```
161
145
## Implementing a NodeFile
162
146
A ` NodeFile ` will be a file already loaded from where the messages will be obtained.
163
147
...
164
148
## Installation
165
149
Maven repository
166
150
``` xml
167
151
<repository >
168
- <id >unnamed-releases</id >
169
- <url >https://repo.unnamed.team/repository/unnamed-releases</url >
152
+ <id >unnamed-releases</id >
153
+ <url >https://repo.unnamed.team/repository/unnamed-releases</url >
170
154
</repository >
171
155
```
172
156
Maven dependency
173
157
``` xml
174
158
<dependency >
175
- <groupId >me.yushust.message</groupId >
176
- <artifactId >core</artifactId >
177
- <version >VERSION</version >
159
+ <groupId >me.yushust.message</groupId >
160
+ <artifactId >message-dispatch- core</artifactId >
161
+ <version >VERSION</version >
178
162
</dependency >
179
163
```
180
164
181
165
Bukkit adapters maven dependency
182
166
(Adds support for YML using Bukkit's ` YamlConfiguration ` )
183
167
``` xml
184
168
<dependency >
185
- <groupId >me.yushust.message</groupId >
186
- <artifactId >bukkit-formatters </artifactId >
187
- <version >VERSION</version >
169
+ <groupId >me.yushust.message</groupId >
170
+ <artifactId >bukkit-message-dispatch </artifactId >
171
+ <version >VERSION</version >
188
172
</dependency >
189
173
```
190
174
> "Yes."
0 commit comments