diff options
author | Chocobozzz <me@florianbigard.com> | 2018-06-06 16:46:42 +0200 |
---|---|---|
committer | Chocobozzz <me@florianbigard.com> | 2018-06-06 16:48:41 +0200 |
commit | 7ce44a74a3b052190cfacd4bd5ee6b92cfc620ac (patch) | |
tree | 6f178426c165f9136eb08354efa4a06c24725f87 /client/src/app/shared | |
parent | f07d6385b4b46c3254898292a8a53ed415b8d49b (diff) | |
download | PeerTube-7ce44a74a3b052190cfacd4bd5ee6b92cfc620ac.tar.gz PeerTube-7ce44a74a3b052190cfacd4bd5ee6b92cfc620ac.tar.zst PeerTube-7ce44a74a3b052190cfacd4bd5ee6b92cfc620ac.zip |
Add server localization
Diffstat (limited to 'client/src/app/shared')
-rw-r--r-- | client/src/app/shared/i18n/i18n-utils.ts | 7 | ||||
-rw-r--r-- | client/src/app/shared/video/video-details.model.ts | 4 | ||||
-rw-r--r-- | client/src/app/shared/video/video.model.ts | 8 | ||||
-rw-r--r-- | client/src/app/shared/video/video.service.ts | 56 |
4 files changed, 50 insertions, 25 deletions
diff --git a/client/src/app/shared/i18n/i18n-utils.ts b/client/src/app/shared/i18n/i18n-utils.ts new file mode 100644 index 000000000..c1de51b7b --- /dev/null +++ b/client/src/app/shared/i18n/i18n-utils.ts | |||
@@ -0,0 +1,7 @@ | |||
1 | function peertubeTranslate (str: string, translations: { [ id: string ]: string }) { | ||
2 | return translations[str] ? translations[str] : str | ||
3 | } | ||
4 | |||
5 | export { | ||
6 | peertubeTranslate | ||
7 | } | ||
diff --git a/client/src/app/shared/video/video-details.model.ts b/client/src/app/shared/video/video-details.model.ts index 5fc55fca6..19c350ab3 100644 --- a/client/src/app/shared/video/video-details.model.ts +++ b/client/src/app/shared/video/video-details.model.ts | |||
@@ -15,8 +15,8 @@ export class VideoDetails extends Video implements VideoDetailsServerModel { | |||
15 | likesPercent: number | 15 | likesPercent: number |
16 | dislikesPercent: number | 16 | dislikesPercent: number |
17 | 17 | ||
18 | constructor (hash: VideoDetailsServerModel) { | 18 | constructor (hash: VideoDetailsServerModel, translations = {}) { |
19 | super(hash) | 19 | super(hash, translations) |
20 | 20 | ||
21 | this.descriptionPath = hash.descriptionPath | 21 | this.descriptionPath = hash.descriptionPath |
22 | this.files = hash.files | 22 | this.files = hash.files |
diff --git a/client/src/app/shared/video/video.model.ts b/client/src/app/shared/video/video.model.ts index 48d562f9c..d37dc2c3e 100644 --- a/client/src/app/shared/video/video.model.ts +++ b/client/src/app/shared/video/video.model.ts | |||
@@ -5,6 +5,7 @@ import { VideoConstant } from '../../../../../shared/models/videos/video.model' | |||
5 | import { getAbsoluteAPIUrl } from '../misc/utils' | 5 | import { getAbsoluteAPIUrl } from '../misc/utils' |
6 | import { ServerConfig } from '../../../../../shared/models' | 6 | import { ServerConfig } from '../../../../../shared/models' |
7 | import { Actor } from '@app/shared/actor/actor.model' | 7 | import { Actor } from '@app/shared/actor/actor.model' |
8 | import { peertubeTranslate } from '@app/shared/i18n/i18n-utils' | ||
8 | 9 | ||
9 | export class Video implements VideoServerModel { | 10 | export class Video implements VideoServerModel { |
10 | by: string | 11 | by: string |
@@ -68,7 +69,7 @@ export class Video implements VideoServerModel { | |||
68 | minutes.toString() + ':' + secondsPadding + seconds.toString() | 69 | minutes.toString() + ':' + secondsPadding + seconds.toString() |
69 | } | 70 | } |
70 | 71 | ||
71 | constructor (hash: VideoServerModel) { | 72 | constructor (hash: VideoServerModel, translations = {}) { |
72 | const absoluteAPIUrl = getAbsoluteAPIUrl() | 73 | const absoluteAPIUrl = getAbsoluteAPIUrl() |
73 | 74 | ||
74 | this.createdAt = new Date(hash.createdAt.toString()) | 75 | this.createdAt = new Date(hash.createdAt.toString()) |
@@ -98,6 +99,11 @@ export class Video implements VideoServerModel { | |||
98 | 99 | ||
99 | this.by = Actor.CREATE_BY_STRING(hash.account.name, hash.account.host) | 100 | this.by = Actor.CREATE_BY_STRING(hash.account.name, hash.account.host) |
100 | this.accountAvatarUrl = Actor.GET_ACTOR_AVATAR_URL(this.account) | 101 | this.accountAvatarUrl = Actor.GET_ACTOR_AVATAR_URL(this.account) |
102 | |||
103 | this.category.label = peertubeTranslate(this.category.label, translations) | ||
104 | this.licence.label = peertubeTranslate(this.licence.label, translations) | ||
105 | this.language.label = peertubeTranslate(this.language.label, translations) | ||
106 | this.privacy.label = peertubeTranslate(this.privacy.label, translations) | ||
101 | } | 107 | } |
102 | 108 | ||
103 | isVideoNSFWForUser (user: User, serverConfig: ServerConfig) { | 109 | isVideoNSFWForUser (user: User, serverConfig: ServerConfig) { |
diff --git a/client/src/app/shared/video/video.service.ts b/client/src/app/shared/video/video.service.ts index d1e32faeb..c607b7d6a 100644 --- a/client/src/app/shared/video/video.service.ts +++ b/client/src/app/shared/video/video.service.ts | |||
@@ -1,4 +1,4 @@ | |||
1 | import { catchError, map } from 'rxjs/operators' | 1 | import { catchError, map, switchMap } from 'rxjs/operators' |
2 | import { HttpClient, HttpParams, HttpRequest } from '@angular/common/http' | 2 | import { HttpClient, HttpParams, HttpRequest } from '@angular/common/http' |
3 | import { Injectable } from '@angular/core' | 3 | import { Injectable } from '@angular/core' |
4 | import { Observable } from 'rxjs' | 4 | import { Observable } from 'rxjs' |
@@ -24,6 +24,7 @@ import { Account } from '@app/shared/account/account.model' | |||
24 | import { AccountService } from '@app/shared/account/account.service' | 24 | import { AccountService } from '@app/shared/account/account.service' |
25 | import { VideoChannel } from '../../../../../shared/models/videos' | 25 | import { VideoChannel } from '../../../../../shared/models/videos' |
26 | import { VideoChannelService } from '@app/shared/video-channel/video-channel.service' | 26 | import { VideoChannelService } from '@app/shared/video-channel/video-channel.service' |
27 | import { ServerService } from '@app/core' | ||
27 | 28 | ||
28 | @Injectable() | 29 | @Injectable() |
29 | export class VideoService { | 30 | export class VideoService { |
@@ -33,7 +34,8 @@ export class VideoService { | |||
33 | constructor ( | 34 | constructor ( |
34 | private authHttp: HttpClient, | 35 | private authHttp: HttpClient, |
35 | private restExtractor: RestExtractor, | 36 | private restExtractor: RestExtractor, |
36 | private restService: RestService | 37 | private restService: RestService, |
38 | private serverService: ServerService | ||
37 | ) {} | 39 | ) {} |
38 | 40 | ||
39 | getVideoViewUrl (uuid: string) { | 41 | getVideoViewUrl (uuid: string) { |
@@ -41,9 +43,13 @@ export class VideoService { | |||
41 | } | 43 | } |
42 | 44 | ||
43 | getVideo (uuid: string): Observable<VideoDetails> { | 45 | getVideo (uuid: string): Observable<VideoDetails> { |
44 | return this.authHttp.get<VideoDetailsServerModel>(VideoService.BASE_VIDEO_URL + uuid) | 46 | return this.serverService.localeObservable |
45 | .pipe( | 47 | .pipe( |
46 | map(videoHash => new VideoDetails(videoHash)), | 48 | switchMap(translations => { |
49 | return this.authHttp.get<VideoDetailsServerModel>(VideoService.BASE_VIDEO_URL + uuid) | ||
50 | .pipe(map(videoHash => ({ videoHash, translations }))) | ||
51 | }), | ||
52 | map(({ videoHash, translations }) => new VideoDetails(videoHash, translations)), | ||
47 | catchError(res => this.restExtractor.handleError(res)) | 53 | catchError(res => this.restExtractor.handleError(res)) |
48 | ) | 54 | ) |
49 | } | 55 | } |
@@ -102,9 +108,10 @@ export class VideoService { | |||
102 | let params = new HttpParams() | 108 | let params = new HttpParams() |
103 | params = this.restService.addRestGetParams(params, pagination, sort) | 109 | params = this.restService.addRestGetParams(params, pagination, sort) |
104 | 110 | ||
105 | return this.authHttp.get(UserService.BASE_USERS_URL + '/me/videos', { params }) | 111 | return this.authHttp |
112 | .get<ResultList<Video>>(UserService.BASE_USERS_URL + '/me/videos', { params }) | ||
106 | .pipe( | 113 | .pipe( |
107 | map(this.extractVideos), | 114 | switchMap(res => this.extractVideos(res)), |
108 | catchError(res => this.restExtractor.handleError(res)) | 115 | catchError(res => this.restExtractor.handleError(res)) |
109 | ) | 116 | ) |
110 | } | 117 | } |
@@ -120,9 +127,9 @@ export class VideoService { | |||
120 | params = this.restService.addRestGetParams(params, pagination, sort) | 127 | params = this.restService.addRestGetParams(params, pagination, sort) |
121 | 128 | ||
122 | return this.authHttp | 129 | return this.authHttp |
123 | .get(AccountService.BASE_ACCOUNT_URL + account.nameWithHost + '/videos', { params }) | 130 | .get<ResultList<Video>>(AccountService.BASE_ACCOUNT_URL + account.nameWithHost + '/videos', { params }) |
124 | .pipe( | 131 | .pipe( |
125 | map(this.extractVideos), | 132 | switchMap(res => this.extractVideos(res)), |
126 | catchError(res => this.restExtractor.handleError(res)) | 133 | catchError(res => this.restExtractor.handleError(res)) |
127 | ) | 134 | ) |
128 | } | 135 | } |
@@ -138,9 +145,9 @@ export class VideoService { | |||
138 | params = this.restService.addRestGetParams(params, pagination, sort) | 145 | params = this.restService.addRestGetParams(params, pagination, sort) |
139 | 146 | ||
140 | return this.authHttp | 147 | return this.authHttp |
141 | .get(VideoChannelService.BASE_VIDEO_CHANNEL_URL + videoChannel.uuid + '/videos', { params }) | 148 | .get<ResultList<Video>>(VideoChannelService.BASE_VIDEO_CHANNEL_URL + videoChannel.uuid + '/videos', { params }) |
142 | .pipe( | 149 | .pipe( |
143 | map(this.extractVideos), | 150 | switchMap(res => this.extractVideos(res)), |
144 | catchError(res => this.restExtractor.handleError(res)) | 151 | catchError(res => this.restExtractor.handleError(res)) |
145 | ) | 152 | ) |
146 | } | 153 | } |
@@ -160,9 +167,9 @@ export class VideoService { | |||
160 | } | 167 | } |
161 | 168 | ||
162 | return this.authHttp | 169 | return this.authHttp |
163 | .get(VideoService.BASE_VIDEO_URL, { params }) | 170 | .get<ResultList<Video>>(VideoService.BASE_VIDEO_URL, { params }) |
164 | .pipe( | 171 | .pipe( |
165 | map(this.extractVideos), | 172 | switchMap(res => this.extractVideos(res)), |
166 | catchError(res => this.restExtractor.handleError(res)) | 173 | catchError(res => this.restExtractor.handleError(res)) |
167 | ) | 174 | ) |
168 | } | 175 | } |
@@ -230,7 +237,7 @@ export class VideoService { | |||
230 | return this.authHttp | 237 | return this.authHttp |
231 | .get<ResultList<VideoServerModel>>(url, { params }) | 238 | .get<ResultList<VideoServerModel>>(url, { params }) |
232 | .pipe( | 239 | .pipe( |
233 | map(this.extractVideos), | 240 | switchMap(res => this.extractVideos(res)), |
234 | catchError(res => this.restExtractor.handleError(res)) | 241 | catchError(res => this.restExtractor.handleError(res)) |
235 | ) | 242 | ) |
236 | } | 243 | } |
@@ -287,14 +294,19 @@ export class VideoService { | |||
287 | } | 294 | } |
288 | 295 | ||
289 | private extractVideos (result: ResultList<VideoServerModel>) { | 296 | private extractVideos (result: ResultList<VideoServerModel>) { |
290 | const videosJson = result.data | 297 | return this.serverService.localeObservable |
291 | const totalVideos = result.total | 298 | .pipe( |
292 | const videos = [] | 299 | map(translations => { |
293 | 300 | const videosJson = result.data | |
294 | for (const videoJson of videosJson) { | 301 | const totalVideos = result.total |
295 | videos.push(new Video(videoJson)) | 302 | const videos: Video[] = [] |
296 | } | 303 | |
297 | 304 | for (const videoJson of videosJson) { | |
298 | return { videos, totalVideos } | 305 | videos.push(new Video(videoJson, translations)) |
306 | } | ||
307 | |||
308 | return { videos, totalVideos } | ||
309 | }) | ||
310 | ) | ||
299 | } | 311 | } |
300 | } | 312 | } |