feat(assistant): photo changes of a journal get their own card and ways back

The four new photo link tools join the journal's tools: the journey chat
offers them to editors, the trip chat loads them with the journey group and
the home chat keeps none. A journeyPhotos card shows the photos as
thumbnails with the entries they leave and reach, the first one marked as
the cover in a new order, and a caption old to new; a library add shows the
photos once they landed. A linked photo comes off again, an unlinked one
goes back, moved photos go back and a caption is written back, each while
nothing changed since. A new order of an entry's photos and a library add
have no way back yet. The journal prompt names the photo tools.
This commit is contained in:
Maurice
2026-10-24 22:07:46 +02:00
parent da43a81d26
commit 0050072b76
43 changed files with 1257 additions and 10 deletions
@@ -0,0 +1,57 @@
import { idSchema } from '../../common/primitives.schema';
import { cardCountSchema, cardDateSchema, cardText } from './card-parts';
import { z } from 'zod';
/**
* Photos of a journal as the assistant chat shows a change of them: one put
* on an entry or taken off it, photos moved from one entry to another, an
* entry's photos in a new order (the first is its cover), a caption changed,
* photos added from a library. A photo travels as its TREK photo id, which
* the client turns into TREK's own thumbnail address.
*/
/** How much a card carries; the server clips to the same numbers. */
export const JOURNEY_PHOTOS_LIMITS = { photos: 8, caption: 160, title: 100 } as const;
export const JOURNEY_PHOTOS_MODES = ['link', 'unlink', 'move', 'order', 'caption', 'add'] as const;
/** An entry the photos leave or reach. */
export const journeyPhotosEntrySchema = z.object({
entryId: idSchema.nullable(),
title: cardText(JOURNEY_PHOTOS_LIMITS.title).nullable(),
date: cardDateSchema.nullable(),
});
export type JourneyPhotosEntry = z.infer<typeof journeyPhotosEntrySchema>;
export const journeyPhotoLookSchema = z.object({
/** The TREK photo, for its thumbnail. */
photoId: idSchema,
video: z.boolean(),
caption: cardText(JOURNEY_PHOTOS_LIMITS.caption).nullable(),
});
export type JourneyPhotoLook = z.infer<typeof journeyPhotoLookSchema>;
export const journeyPhotosCardSchema = z.object({
kind: z.literal('journeyPhotos'),
journeyId: idSchema,
mode: z.enum(JOURNEY_PHOTOS_MODES),
/** The entry the photos leave (a move, an unlink). */
from: journeyPhotosEntrySchema.nullable(),
/** The entry the photos reach or whose photos change (a link, a move, a new order, an add). */
to: journeyPhotosEntrySchema.nullable(),
/** In the order the change leaves them; for a new order, the first is the entry's cover. */
photos: z.array(journeyPhotoLookSchema).max(JOURNEY_PHOTOS_LIMITS.photos),
/** Photos the change concerns that the card does not carry. */
more: cardCountSchema,
/** A move that leaves the photos on the first entry as well. */
kept: z.boolean(),
/** A caption change, old to new; null on every other change. */
caption: z
.object({
before: cardText(JOURNEY_PHOTOS_LIMITS.caption).nullable(),
after: cardText(JOURNEY_PHOTOS_LIMITS.caption).nullable(),
})
.nullable(),
});
export type JourneyPhotosCard = z.infer<typeof journeyPhotosCardSchema>;
+15 -2
View File
@@ -1,8 +1,10 @@
import { journeyEntriesCardSchema } from './journey-entries.card';
import { journeyHeaderCardSchema } from './journey-header.card';
import { journeyPhotosCardSchema } from './journey-photos.card';
export * from './journey-entries.card';
export * from './journey-header.card';
export * from './journey-photos.card';
/**
* What the travel journal brings to the assistant chat: the kinds of card it draws,
@@ -11,11 +13,16 @@ export * from './journey-header.card';
* spread these into the card union and the shared enums, so a new kind, verb
* or entity is added here and nowhere else.
*/
export const JOURNEY_CARD_SCHEMAS = [journeyEntriesCardSchema, journeyHeaderCardSchema] as const;
export const JOURNEY_CARD_SCHEMAS = [
journeyEntriesCardSchema,
journeyHeaderCardSchema,
journeyPhotosCardSchema,
] as const;
/**
* An entry written, changed or deleted, the entries put in a new order; a journal started, renamed, given
* another status or other settings, deleted; a trip linked or unlinked; its
* suggestions brought back; the user's own view of it changed.
* suggestions brought back; the user's own view of it changed; a photo put on
* an entry, taken off, moved, put in order, captioned or added.
*/
export const JOURNEY_VERB_KEYS = [
'addJournalEntry',
@@ -31,6 +38,12 @@ export const JOURNEY_VERB_KEYS = [
'unlinkJournalTrip',
'restoreJournalSuggestions',
'setJournalPreferences',
'linkJournalPhoto',
'unlinkJournalPhoto',
'moveJournalPhotos',
'orderJournalPhotos',
'captionJournalPhoto',
'addJournalPhotos',
] as const;
/** An entry of a journal, or the journal itself; the receipt opens it there. */
export const JOURNEY_APPLIED_ENTITIES = ['journey_entry', 'journey'] as const;
+11
View File
@@ -90,5 +90,16 @@ const assistantJourney: TranslationStrings = {
'assistant.card.journey.cons.two': '{count} نقطتان سلبيتان',
'assistant.card.journey.cons.few': '{count} نقاط سلبية',
'assistant.card.journey.cons.many': '{count} نقطة سلبية',
'assistant.change.verb.linkJournalPhoto': 'إضافة صورة إلى المدخل',
'assistant.change.verb.unlinkJournalPhoto': 'إزالة صورة من المدخل',
'assistant.change.verb.moveJournalPhotos': 'نقل الصور إلى مدخل آخر',
'assistant.change.verb.orderJournalPhotos': 'إعادة ترتيب صور المدخل',
'assistant.change.verb.captionJournalPhoto': 'تغيير تعليق صورة',
'assistant.change.verb.addJournalPhotos': 'إضافة صور من المكتبة',
'assistant.card.journeyPhotos.cover': 'غلاف المدخل',
'assistant.card.journeyPhotos.firstIsCover': 'تصبح الصورة الأولى غلاف المدخل.',
'assistant.card.journeyPhotos.kept': 'تبقى أيضًا في المدخل الأول.',
'assistant.card.journeyPhotos.staysInGallery': 'تبقى الصور في معرض اليوميات.',
'assistant.card.journeyPhotos.fromLibrary': 'من مكتبة صورك؛ تحتفظ اليوميات بمرجع إليها فقط.',
};
export default assistantJourney;
+11
View File
@@ -60,5 +60,16 @@ const assistantJourney: TranslationStrings = {
'assistant.card.journey.pros.one': '{count} müsbət cəhət',
'assistant.card.journey.cons': '{count} mənfi cəhət',
'assistant.card.journey.cons.one': '{count} mənfi cəhət',
'assistant.change.verb.linkJournalPhoto': 'Şəkli qeydə əlavə et',
'assistant.change.verb.unlinkJournalPhoto': 'Şəkli qeyddən götür',
'assistant.change.verb.moveJournalPhotos': 'Şəkilləri başqa qeydə köçür',
'assistant.change.verb.orderJournalPhotos': 'Qeydin şəkillərini yenidən sırala',
'assistant.change.verb.captionJournalPhoto': 'Şəklin başlığını dəyiş',
'assistant.change.verb.addJournalPhotos': 'Kitabxanadan şəkil əlavə et',
'assistant.card.journeyPhotos.cover': 'Qeydin üz şəkli',
'assistant.card.journeyPhotos.firstIsCover': 'İlk şəkil qeydin üz şəkli olur.',
'assistant.card.journeyPhotos.kept': 'Onlar birinci qeyddə də qalır.',
'assistant.card.journeyPhotos.staysInGallery': 'Şəkillər gündəliyin qalereyasında qalır.',
'assistant.card.journeyPhotos.fromLibrary': 'Şəkil kitabxanandan; gündəlik yalnız istinadı saxlayır.',
};
export default assistantJourney;
+11
View File
@@ -58,5 +58,16 @@ const assistantJourney: TranslationStrings = {
'assistant.card.journey.pros.one': '{count} ponto positivo',
'assistant.card.journey.cons': '{count} pontos negativos',
'assistant.card.journey.cons.one': '{count} ponto negativo',
'assistant.change.verb.linkJournalPhoto': 'Colocar uma foto na entrada',
'assistant.change.verb.unlinkJournalPhoto': 'Tirar uma foto da entrada',
'assistant.change.verb.moveJournalPhotos': 'Mover fotos para outra entrada',
'assistant.change.verb.orderJournalPhotos': 'Reordenar as fotos da entrada',
'assistant.change.verb.captionJournalPhoto': 'Mudar a legenda de uma foto',
'assistant.change.verb.addJournalPhotos': 'Adicionar fotos da biblioteca',
'assistant.card.journeyPhotos.cover': 'Capa da entrada',
'assistant.card.journeyPhotos.firstIsCover': 'A primeira foto vira a capa da entrada.',
'assistant.card.journeyPhotos.kept': 'Elas também ficam na primeira entrada.',
'assistant.card.journeyPhotos.staysInGallery': 'As fotos continuam na galeria do diário.',
'assistant.card.journeyPhotos.fromLibrary': 'Da sua biblioteca de fotos; o diário guarda só a referência.',
};
export default assistantJourney;
+11
View File
@@ -58,5 +58,16 @@ const assistantJourney: TranslationStrings = {
'assistant.card.journey.pros.one': '{count} punt fort',
'assistant.card.journey.cons': '{count} punts febles',
'assistant.card.journey.cons.one': '{count} punt feble',
'assistant.change.verb.linkJournalPhoto': "Posar una foto a l'entrada",
'assistant.change.verb.unlinkJournalPhoto': "Treure una foto de l'entrada",
'assistant.change.verb.moveJournalPhotos': 'Moure fotos a una altra entrada',
'assistant.change.verb.orderJournalPhotos': "Reordenar les fotos de l'entrada",
'assistant.change.verb.captionJournalPhoto': "Canviar el peu d'una foto",
'assistant.change.verb.addJournalPhotos': 'Afegir fotos de la biblioteca',
'assistant.card.journeyPhotos.cover': "Portada de l'entrada",
'assistant.card.journeyPhotos.firstIsCover': "La primera foto passa a ser la portada de l'entrada.",
'assistant.card.journeyPhotos.kept': 'També es queden a la primera entrada.',
'assistant.card.journeyPhotos.staysInGallery': 'Les fotos es queden a la galeria del diari.',
'assistant.card.journeyPhotos.fromLibrary': 'De la teva biblioteca de fotos; el diari només en desa la referència.',
};
export default assistantJourney;
+11
View File
@@ -66,5 +66,16 @@ const assistantJourney: TranslationStrings = {
'assistant.card.journey.cons': '{count} minusů',
'assistant.card.journey.cons.one': '{count} minus',
'assistant.card.journey.cons.few': '{count} minusy',
'assistant.change.verb.linkJournalPhoto': 'Přidat fotku k záznamu',
'assistant.change.verb.unlinkJournalPhoto': 'Odebrat fotku ze záznamu',
'assistant.change.verb.moveJournalPhotos': 'Přesunout fotky do jiného záznamu',
'assistant.change.verb.orderJournalPhotos': 'Přeuspořádat fotky záznamu',
'assistant.change.verb.captionJournalPhoto': 'Změnit popisek fotky',
'assistant.change.verb.addJournalPhotos': 'Přidat fotky z knihovny',
'assistant.card.journeyPhotos.cover': 'Titulní fotka záznamu',
'assistant.card.journeyPhotos.firstIsCover': 'První fotka se stane titulní fotkou záznamu.',
'assistant.card.journeyPhotos.kept': 'Zůstanou i u prvního záznamu.',
'assistant.card.journeyPhotos.staysInGallery': 'Fotky zůstanou v galerii deníku.',
'assistant.card.journeyPhotos.fromLibrary': 'Z tvé knihovny fotek; deník si uloží jen odkaz.',
};
export default assistantJourney;
+11
View File
@@ -60,5 +60,16 @@ const assistantJourney: TranslationStrings = {
'assistant.card.journey.pros.one': '{count} Pluspunkt',
'assistant.card.journey.cons': '{count} Minuspunkte',
'assistant.card.journey.cons.one': '{count} Minuspunkt',
'assistant.change.verb.linkJournalPhoto': 'Foto zum Eintrag legen',
'assistant.change.verb.unlinkJournalPhoto': 'Foto vom Eintrag nehmen',
'assistant.change.verb.moveJournalPhotos': 'Fotos in einen anderen Eintrag verschieben',
'assistant.change.verb.orderJournalPhotos': 'Fotos des Eintrags neu ordnen',
'assistant.change.verb.captionJournalPhoto': 'Bildunterschrift ändern',
'assistant.change.verb.addJournalPhotos': 'Fotos aus der Bibliothek hinzufügen',
'assistant.card.journeyPhotos.cover': 'Titelbild des Eintrags',
'assistant.card.journeyPhotos.firstIsCover': 'Das erste Foto wird zum Titelbild des Eintrags.',
'assistant.card.journeyPhotos.kept': 'Sie bleiben auch beim ersten Eintrag.',
'assistant.card.journeyPhotos.staysInGallery': 'Die Fotos bleiben in der Galerie des Journals.',
'assistant.card.journeyPhotos.fromLibrary': 'Aus deiner Fotobibliothek; das Journal merkt sich nur den Verweis.',
};
export default assistantJourney;
+11
View File
@@ -58,5 +58,16 @@ const assistantJourney: TranslationStrings = {
'assistant.card.journey.pros.one': '{count} good point',
'assistant.card.journey.cons': '{count} weak points',
'assistant.card.journey.cons.one': '{count} weak point',
'assistant.change.verb.linkJournalPhoto': 'Put a photo on the entry',
'assistant.change.verb.unlinkJournalPhoto': 'Take a photo off the entry',
'assistant.change.verb.moveJournalPhotos': 'Move photos to another entry',
'assistant.change.verb.orderJournalPhotos': "Put the entry's photos in a new order",
'assistant.change.verb.captionJournalPhoto': "Change a photo's caption",
'assistant.change.verb.addJournalPhotos': 'Add photos from the library',
'assistant.card.journeyPhotos.cover': 'Entry cover',
'assistant.card.journeyPhotos.firstIsCover': "The first photo becomes the entry's cover.",
'assistant.card.journeyPhotos.kept': 'They also stay on the first entry.',
'assistant.card.journeyPhotos.staysInGallery': "The photos stay in the journal's gallery.",
'assistant.card.journeyPhotos.fromLibrary': 'From your photo library; the journal keeps a reference.',
};
export default assistantJourney;
+11
View File
@@ -59,5 +59,16 @@ const assistantJourney: TranslationStrings = {
'assistant.card.journey.pros.one': '{count} punto a favor',
'assistant.card.journey.cons': '{count} puntos en contra',
'assistant.card.journey.cons.one': '{count} punto en contra',
'assistant.change.verb.linkJournalPhoto': 'Poner una foto en la entrada',
'assistant.change.verb.unlinkJournalPhoto': 'Quitar una foto de la entrada',
'assistant.change.verb.moveJournalPhotos': 'Mover fotos a otra entrada',
'assistant.change.verb.orderJournalPhotos': 'Reordenar las fotos de la entrada',
'assistant.change.verb.captionJournalPhoto': 'Cambiar el pie de una foto',
'assistant.change.verb.addJournalPhotos': 'Añadir fotos de la biblioteca',
'assistant.card.journeyPhotos.cover': 'Portada de la entrada',
'assistant.card.journeyPhotos.firstIsCover': 'La primera foto pasa a ser la portada de la entrada.',
'assistant.card.journeyPhotos.kept': 'También se quedan en la primera entrada.',
'assistant.card.journeyPhotos.staysInGallery': 'Las fotos se quedan en la galería del diario.',
'assistant.card.journeyPhotos.fromLibrary': 'De tu biblioteca de fotos; el diario solo guarda la referencia.',
};
export default assistantJourney;
+11
View File
@@ -59,5 +59,16 @@ const assistantJourney: TranslationStrings = {
'assistant.card.journey.pros.one': '{count} pluss',
'assistant.card.journey.cons': '{count} miinust',
'assistant.card.journey.cons.one': '{count} miinus',
'assistant.change.verb.linkJournalPhoto': 'Lisa foto sissekandele',
'assistant.change.verb.unlinkJournalPhoto': 'Eemalda foto sissekandelt',
'assistant.change.verb.moveJournalPhotos': 'Tõsta fotod teisele sissekandele',
'assistant.change.verb.orderJournalPhotos': 'Järjesta sissekande fotod ümber',
'assistant.change.verb.captionJournalPhoto': 'Muuda foto pealdist',
'assistant.change.verb.addJournalPhotos': 'Lisa fotod kogust',
'assistant.card.journeyPhotos.cover': 'Sissekande kaanepilt',
'assistant.card.journeyPhotos.firstIsCover': 'Esimesest fotost saab sissekande kaanepilt.',
'assistant.card.journeyPhotos.kept': 'Need jäävad ka esimesele sissekandele.',
'assistant.card.journeyPhotos.staysInGallery': 'Fotod jäävad päeviku galeriisse.',
'assistant.card.journeyPhotos.fromLibrary': 'Sinu fotokogust; päevik hoiab ainult viidet.',
};
export default assistantJourney;
+11
View File
@@ -60,5 +60,16 @@ const assistantJourney: TranslationStrings = {
'assistant.card.journey.pros.one': '{count} point fort',
'assistant.card.journey.cons': '{count} points faibles',
'assistant.card.journey.cons.one': '{count} point faible',
'assistant.change.verb.linkJournalPhoto': "Ajouter une photo à l'entrée",
'assistant.change.verb.unlinkJournalPhoto': "Retirer une photo de l'entrée",
'assistant.change.verb.moveJournalPhotos': 'Déplacer des photos vers une autre entrée',
'assistant.change.verb.orderJournalPhotos': "Réordonner les photos de l'entrée",
'assistant.change.verb.captionJournalPhoto': "Modifier la légende d'une photo",
'assistant.change.verb.addJournalPhotos': 'Ajouter des photos de la photothèque',
'assistant.card.journeyPhotos.cover': "Couverture de l'entrée",
'assistant.card.journeyPhotos.firstIsCover': "La première photo devient la couverture de l'entrée.",
'assistant.card.journeyPhotos.kept': 'Elles restent aussi sur la première entrée.',
'assistant.card.journeyPhotos.staysInGallery': 'Les photos restent dans la galerie du journal.',
'assistant.card.journeyPhotos.fromLibrary': "Depuis votre photothèque ; le journal ne garde qu'une référence.",
};
export default assistantJourney;
+11
View File
@@ -60,5 +60,16 @@ const assistantJourney: TranslationStrings = {
'assistant.card.journey.pros.one': '{count} θετικό',
'assistant.card.journey.cons': '{count} αρνητικά',
'assistant.card.journey.cons.one': '{count} αρνητικό',
'assistant.change.verb.linkJournalPhoto': 'Προσθήκη φωτογραφίας στην καταχώριση',
'assistant.change.verb.unlinkJournalPhoto': 'Αφαίρεση φωτογραφίας από την καταχώριση',
'assistant.change.verb.moveJournalPhotos': 'Μετακίνηση φωτογραφιών σε άλλη καταχώριση',
'assistant.change.verb.orderJournalPhotos': 'Αναδιάταξη φωτογραφιών της καταχώρισης',
'assistant.change.verb.captionJournalPhoto': 'Αλλαγή λεζάντας φωτογραφίας',
'assistant.change.verb.addJournalPhotos': 'Προσθήκη φωτογραφιών από τη βιβλιοθήκη',
'assistant.card.journeyPhotos.cover': 'Εξώφυλλο καταχώρισης',
'assistant.card.journeyPhotos.firstIsCover': 'Η πρώτη φωτογραφία γίνεται εξώφυλλο της καταχώρισης.',
'assistant.card.journeyPhotos.kept': 'Μένουν και στην πρώτη καταχώριση.',
'assistant.card.journeyPhotos.staysInGallery': 'Οι φωτογραφίες μένουν στη συλλογή του ημερολογίου.',
'assistant.card.journeyPhotos.fromLibrary': 'Από τη βιβλιοθήκη φωτογραφιών σου· το ημερολόγιο κρατά μόνο αναφορά.',
};
export default assistantJourney;
+11
View File
@@ -60,5 +60,16 @@ const assistantJourney: TranslationStrings = {
'assistant.card.journey.pros.one': '{count} előny',
'assistant.card.journey.cons': '{count} hátrány',
'assistant.card.journey.cons.one': '{count} hátrány',
'assistant.change.verb.linkJournalPhoto': 'Fotó hozzáadása a bejegyzéshez',
'assistant.change.verb.unlinkJournalPhoto': 'Fotó levétele a bejegyzésről',
'assistant.change.verb.moveJournalPhotos': 'Fotók áthelyezése másik bejegyzéshez',
'assistant.change.verb.orderJournalPhotos': 'A bejegyzés fotóinak átrendezése',
'assistant.change.verb.captionJournalPhoto': 'Fotó feliratának módosítása',
'assistant.change.verb.addJournalPhotos': 'Fotók hozzáadása a könyvtárból',
'assistant.card.journeyPhotos.cover': 'A bejegyzés borítóképe',
'assistant.card.journeyPhotos.firstIsCover': 'Az első fotó lesz a bejegyzés borítóképe.',
'assistant.card.journeyPhotos.kept': 'Az első bejegyzésen is megmaradnak.',
'assistant.card.journeyPhotos.staysInGallery': 'A fotók a napló galériájában maradnak.',
'assistant.card.journeyPhotos.fromLibrary': 'A fotókönyvtáradból; a napló csak hivatkozást tárol.',
};
export default assistantJourney;
+11
View File
@@ -51,5 +51,16 @@ const assistantJourney: TranslationStrings = {
'assistant.change.verb.reorderJournalEntries': 'Urutkan ulang entri',
'assistant.card.journey.pros': '{count} hal positif',
'assistant.card.journey.cons': '{count} hal negatif',
'assistant.change.verb.linkJournalPhoto': 'Taruh foto di entri',
'assistant.change.verb.unlinkJournalPhoto': 'Lepas foto dari entri',
'assistant.change.verb.moveJournalPhotos': 'Pindahkan foto ke entri lain',
'assistant.change.verb.orderJournalPhotos': 'Urutkan ulang foto entri',
'assistant.change.verb.captionJournalPhoto': 'Ubah keterangan foto',
'assistant.change.verb.addJournalPhotos': 'Tambahkan foto dari pustaka',
'assistant.card.journeyPhotos.cover': 'Sampul entri',
'assistant.card.journeyPhotos.firstIsCover': 'Foto pertama menjadi sampul entri.',
'assistant.card.journeyPhotos.kept': 'Foto juga tetap di entri pertama.',
'assistant.card.journeyPhotos.staysInGallery': 'Foto tetap ada di galeri jurnal.',
'assistant.card.journeyPhotos.fromLibrary': 'Dari pustaka fotomu; jurnal hanya menyimpan rujukannya.',
};
export default assistantJourney;
+11
View File
@@ -59,5 +59,16 @@ const assistantJourney: TranslationStrings = {
'assistant.card.journey.pros.one': '{count} punto a favore',
'assistant.card.journey.cons': '{count} punti a sfavore',
'assistant.card.journey.cons.one': '{count} punto a sfavore',
'assistant.change.verb.linkJournalPhoto': 'Aggiungi una foto alla voce',
'assistant.change.verb.unlinkJournalPhoto': 'Togli una foto dalla voce',
'assistant.change.verb.moveJournalPhotos': "Sposta le foto in un'altra voce",
'assistant.change.verb.orderJournalPhotos': 'Riordina le foto della voce',
'assistant.change.verb.captionJournalPhoto': 'Cambia la didascalia di una foto',
'assistant.change.verb.addJournalPhotos': 'Aggiungi foto dalla libreria',
'assistant.card.journeyPhotos.cover': 'Copertina della voce',
'assistant.card.journeyPhotos.firstIsCover': 'La prima foto diventa la copertina della voce.',
'assistant.card.journeyPhotos.kept': 'Restano anche nella prima voce.',
'assistant.card.journeyPhotos.staysInGallery': 'Le foto restano nella galleria del diario.',
'assistant.card.journeyPhotos.fromLibrary': 'Dalla tua libreria di foto; il diario ne tiene solo il riferimento.',
};
export default assistantJourney;
+11
View File
@@ -50,5 +50,16 @@ const assistantJourney: TranslationStrings = {
'assistant.change.verb.reorderJournalEntries': 'エントリーを並べ替える',
'assistant.card.journey.pros': '良い点 {count} 件',
'assistant.card.journey.cons': '残念な点 {count} 件',
'assistant.change.verb.linkJournalPhoto': 'エントリーに写真を追加',
'assistant.change.verb.unlinkJournalPhoto': 'エントリーから写真を外す',
'assistant.change.verb.moveJournalPhotos': '写真を別のエントリーへ移動',
'assistant.change.verb.orderJournalPhotos': 'エントリーの写真を並べ替える',
'assistant.change.verb.captionJournalPhoto': '写真のキャプションを変更',
'assistant.change.verb.addJournalPhotos': 'ライブラリから写真を追加',
'assistant.card.journeyPhotos.cover': 'エントリーのカバー',
'assistant.card.journeyPhotos.firstIsCover': '最初の写真がエントリーのカバーになります。',
'assistant.card.journeyPhotos.kept': '最初のエントリーにも残ります。',
'assistant.card.journeyPhotos.staysInGallery': '写真はジャーナルのギャラリーに残ります。',
'assistant.card.journeyPhotos.fromLibrary': '写真ライブラリから。ジャーナルには参照だけが保存されます。',
};
export default assistantJourney;
+11
View File
@@ -50,5 +50,16 @@ const assistantJourney: TranslationStrings = {
'assistant.change.verb.reorderJournalEntries': '항목 순서 바꾸기',
'assistant.card.journey.pros': '좋은 점 {count}개',
'assistant.card.journey.cons': '아쉬운 점 {count}개',
'assistant.change.verb.linkJournalPhoto': '항목에 사진 넣기',
'assistant.change.verb.unlinkJournalPhoto': '항목에서 사진 빼기',
'assistant.change.verb.moveJournalPhotos': '사진을 다른 항목으로 옮기기',
'assistant.change.verb.orderJournalPhotos': '항목 사진 순서 바꾸기',
'assistant.change.verb.captionJournalPhoto': '사진 설명 바꾸기',
'assistant.change.verb.addJournalPhotos': '라이브러리에서 사진 추가',
'assistant.card.journeyPhotos.cover': '항목 표지',
'assistant.card.journeyPhotos.firstIsCover': '첫 번째 사진이 항목 표지가 돼요.',
'assistant.card.journeyPhotos.kept': '첫 번째 항목에도 남아요.',
'assistant.card.journeyPhotos.staysInGallery': '사진은 저널 갤러리에 남아요.',
'assistant.card.journeyPhotos.fromLibrary': '사진 라이브러리에서 가져와요. 저널에는 참조만 저장돼요.',
};
export default assistantJourney;
+11
View File
@@ -59,5 +59,16 @@ const assistantJourney: TranslationStrings = {
'assistant.card.journey.pros.one': '{count} pluspunt',
'assistant.card.journey.cons': '{count} minpunten',
'assistant.card.journey.cons.one': '{count} minpunt',
'assistant.change.verb.linkJournalPhoto': 'Foto bij het bericht zetten',
'assistant.change.verb.unlinkJournalPhoto': 'Foto van het bericht halen',
'assistant.change.verb.moveJournalPhotos': "Foto's naar een ander bericht verplaatsen",
'assistant.change.verb.orderJournalPhotos': "Foto's van het bericht opnieuw ordenen",
'assistant.change.verb.captionJournalPhoto': 'Bijschrift van een foto wijzigen',
'assistant.change.verb.addJournalPhotos': "Foto's uit de bibliotheek toevoegen",
'assistant.card.journeyPhotos.cover': 'Omslag van het bericht',
'assistant.card.journeyPhotos.firstIsCover': 'De eerste foto wordt de omslag van het bericht.',
'assistant.card.journeyPhotos.kept': 'Ze blijven ook bij het eerste bericht.',
'assistant.card.journeyPhotos.staysInGallery': "De foto's blijven in de galerij van het dagboek.",
'assistant.card.journeyPhotos.fromLibrary': 'Uit je fotobibliotheek; het dagboek bewaart alleen een verwijzing.',
};
export default assistantJourney;
+11
View File
@@ -75,5 +75,16 @@ const assistantJourney: TranslationStrings = {
'assistant.card.journey.cons.one': '{count} minus',
'assistant.card.journey.cons.few': '{count} minusy',
'assistant.card.journey.cons.many': '{count} minusów',
'assistant.change.verb.linkJournalPhoto': 'Dodaj zdjęcie do wpisu',
'assistant.change.verb.unlinkJournalPhoto': 'Usuń zdjęcie z wpisu',
'assistant.change.verb.moveJournalPhotos': 'Przenieś zdjęcia do innego wpisu',
'assistant.change.verb.orderJournalPhotos': 'Zmień kolejność zdjęć wpisu',
'assistant.change.verb.captionJournalPhoto': 'Zmień podpis zdjęcia',
'assistant.change.verb.addJournalPhotos': 'Dodaj zdjęcia z biblioteki',
'assistant.card.journeyPhotos.cover': 'Okładka wpisu',
'assistant.card.journeyPhotos.firstIsCover': 'Pierwsze zdjęcie staje się okładką wpisu.',
'assistant.card.journeyPhotos.kept': 'Zostają też przy pierwszym wpisie.',
'assistant.card.journeyPhotos.staysInGallery': 'Zdjęcia zostają w galerii dziennika.',
'assistant.card.journeyPhotos.fromLibrary': 'Z twojej biblioteki zdjęć; dziennik zapisuje tylko odnośnik.',
};
export default assistantJourney;
+11
View File
@@ -75,5 +75,16 @@ const assistantJourney: TranslationStrings = {
'assistant.card.journey.cons.one': '{count} минус',
'assistant.card.journey.cons.few': '{count} минуса',
'assistant.card.journey.cons.many': '{count} минусов',
'assistant.change.verb.linkJournalPhoto': 'Добавить фото к записи',
'assistant.change.verb.unlinkJournalPhoto': 'Убрать фото из записи',
'assistant.change.verb.moveJournalPhotos': 'Перенести фото в другую запись',
'assistant.change.verb.orderJournalPhotos': 'Изменить порядок фото записи',
'assistant.change.verb.captionJournalPhoto': 'Изменить подпись к фото',
'assistant.change.verb.addJournalPhotos': 'Добавить фото из библиотеки',
'assistant.card.journeyPhotos.cover': 'Обложка записи',
'assistant.card.journeyPhotos.firstIsCover': 'Первое фото станет обложкой записи.',
'assistant.card.journeyPhotos.kept': 'Они останутся и в первой записи.',
'assistant.card.journeyPhotos.staysInGallery': 'Фото останутся в галерее дневника.',
'assistant.card.journeyPhotos.fromLibrary': 'Из твоей фотобиблиотеки; дневник хранит только ссылку.',
};
export default assistantJourney;
+11
View File
@@ -66,5 +66,16 @@ const assistantJourney: TranslationStrings = {
'assistant.card.journey.cons': '{count} mínusov',
'assistant.card.journey.cons.one': '{count} mínus',
'assistant.card.journey.cons.few': '{count} mínusy',
'assistant.change.verb.linkJournalPhoto': 'Pridať fotku k záznamu',
'assistant.change.verb.unlinkJournalPhoto': 'Odobrať fotku zo záznamu',
'assistant.change.verb.moveJournalPhotos': 'Presunúť fotky do iného záznamu',
'assistant.change.verb.orderJournalPhotos': 'Preusporiadať fotky záznamu',
'assistant.change.verb.captionJournalPhoto': 'Zmeniť popis fotky',
'assistant.change.verb.addJournalPhotos': 'Pridať fotky z knižnice',
'assistant.card.journeyPhotos.cover': 'Titulná fotka záznamu',
'assistant.card.journeyPhotos.firstIsCover': 'Prvá fotka sa stane titulnou fotkou záznamu.',
'assistant.card.journeyPhotos.kept': 'Zostanú aj pri prvom zázname.',
'assistant.card.journeyPhotos.staysInGallery': 'Fotky zostanú v galérii denníka.',
'assistant.card.journeyPhotos.fromLibrary': 'Z tvojej knižnice fotiek; denník si uloží len odkaz.',
};
export default assistantJourney;
+11
View File
@@ -58,5 +58,16 @@ const assistantJourney: TranslationStrings = {
'assistant.card.journey.pros.one': '{count} fördel',
'assistant.card.journey.cons': '{count} nackdelar',
'assistant.card.journey.cons.one': '{count} nackdel',
'assistant.change.verb.linkJournalPhoto': 'Lägg ett foto på inlägget',
'assistant.change.verb.unlinkJournalPhoto': 'Ta bort ett foto från inlägget',
'assistant.change.verb.moveJournalPhotos': 'Flytta foton till ett annat inlägg',
'assistant.change.verb.orderJournalPhotos': 'Ordna om inläggets foton',
'assistant.change.verb.captionJournalPhoto': 'Ändra ett fotos bildtext',
'assistant.change.verb.addJournalPhotos': 'Lägg till foton från biblioteket',
'assistant.card.journeyPhotos.cover': 'Inläggets omslag',
'assistant.card.journeyPhotos.firstIsCover': 'Det första fotot blir inläggets omslag.',
'assistant.card.journeyPhotos.kept': 'De finns kvar på det första inlägget också.',
'assistant.card.journeyPhotos.staysInGallery': 'Fotona finns kvar i dagbokens galleri.',
'assistant.card.journeyPhotos.fromLibrary': 'Från ditt fotobibliotek; dagboken sparar bara en hänvisning.',
};
export default assistantJourney;
+11
View File
@@ -50,5 +50,16 @@ const assistantJourney: TranslationStrings = {
'assistant.change.verb.reorderJournalEntries': 'จัดลำดับรายการใหม่',
'assistant.card.journey.pros': 'ข้อดี {count} ข้อ',
'assistant.card.journey.cons': 'ข้อเสีย {count} ข้อ',
'assistant.change.verb.linkJournalPhoto': 'ใส่รูปในรายการ',
'assistant.change.verb.unlinkJournalPhoto': 'เอารูปออกจากรายการ',
'assistant.change.verb.moveJournalPhotos': 'ย้ายรูปไปยังรายการอื่น',
'assistant.change.verb.orderJournalPhotos': 'จัดลำดับรูปของรายการใหม่',
'assistant.change.verb.captionJournalPhoto': 'เปลี่ยนคำบรรยายรูป',
'assistant.change.verb.addJournalPhotos': 'เพิ่มรูปจากคลังภาพ',
'assistant.card.journeyPhotos.cover': 'ภาพปกของรายการ',
'assistant.card.journeyPhotos.firstIsCover': 'รูปแรกจะกลายเป็นภาพปกของรายการ',
'assistant.card.journeyPhotos.kept': 'รูปยังคงอยู่ในรายการแรกด้วย',
'assistant.card.journeyPhotos.staysInGallery': 'รูปยังอยู่ในแกลเลอรีของบันทึก',
'assistant.card.journeyPhotos.fromLibrary': 'จากคลังภาพของคุณ บันทึกเก็บไว้เพียงลิงก์อ้างอิง',
};
export default assistantJourney;
+11
View File
@@ -59,5 +59,16 @@ const assistantJourney: TranslationStrings = {
'assistant.card.journey.pros.one': '{count} artı',
'assistant.card.journey.cons': '{count} eksi',
'assistant.card.journey.cons.one': '{count} eksi',
'assistant.change.verb.linkJournalPhoto': 'Kayda fotoğraf ekle',
'assistant.change.verb.unlinkJournalPhoto': 'Fotoğrafı kayıttan kaldır',
'assistant.change.verb.moveJournalPhotos': 'Fotoğrafları başka kayda taşı',
'assistant.change.verb.orderJournalPhotos': 'Kaydın fotoğraflarını yeniden sırala',
'assistant.change.verb.captionJournalPhoto': 'Fotoğraf açıklamasını değiştir',
'assistant.change.verb.addJournalPhotos': 'Kitaplıktan fotoğraf ekle',
'assistant.card.journeyPhotos.cover': 'Kayıt kapağı',
'assistant.card.journeyPhotos.firstIsCover': 'İlk fotoğraf kaydın kapağı olur.',
'assistant.card.journeyPhotos.kept': 'İlk kayıtta da kalırlar.',
'assistant.card.journeyPhotos.staysInGallery': 'Fotoğraflar günlüğün galerisinde kalır.',
'assistant.card.journeyPhotos.fromLibrary': 'Fotoğraf kitaplığından; günlük yalnızca bağlantıyı saklar.',
};
export default assistantJourney;
+11
View File
@@ -75,5 +75,16 @@ const assistantJourney: TranslationStrings = {
'assistant.card.journey.cons.one': '{count} мінус',
'assistant.card.journey.cons.few': '{count} мінуси',
'assistant.card.journey.cons.many': '{count} мінусів',
'assistant.change.verb.linkJournalPhoto': 'Додати фото до запису',
'assistant.change.verb.unlinkJournalPhoto': 'Прибрати фото із запису',
'assistant.change.verb.moveJournalPhotos': 'Перенести фото до іншого запису',
'assistant.change.verb.orderJournalPhotos': 'Змінити порядок фото запису',
'assistant.change.verb.captionJournalPhoto': 'Змінити підпис до фото',
'assistant.change.verb.addJournalPhotos': 'Додати фото з бібліотеки',
'assistant.card.journeyPhotos.cover': 'Обкладинка запису',
'assistant.card.journeyPhotos.firstIsCover': 'Перше фото стане обкладинкою запису.',
'assistant.card.journeyPhotos.kept': 'Вони залишаться і в першому записі.',
'assistant.card.journeyPhotos.staysInGallery': 'Фото залишаться в галереї щоденника.',
'assistant.card.journeyPhotos.fromLibrary': 'З твоєї фотобібліотеки; щоденник зберігає лише посилання.',
};
export default assistantJourney;
+11
View File
@@ -51,5 +51,16 @@ const assistantJourney: TranslationStrings = {
'assistant.change.verb.reorderJournalEntries': 'Sắp xếp lại các mục',
'assistant.card.journey.pros': '{count} điểm cộng',
'assistant.card.journey.cons': '{count} điểm trừ',
'assistant.change.verb.linkJournalPhoto': 'Thêm ảnh vào mục',
'assistant.change.verb.unlinkJournalPhoto': 'Bỏ ảnh khỏi mục',
'assistant.change.verb.moveJournalPhotos': 'Chuyển ảnh sang mục khác',
'assistant.change.verb.orderJournalPhotos': 'Sắp xếp lại ảnh của mục',
'assistant.change.verb.captionJournalPhoto': 'Đổi chú thích ảnh',
'assistant.change.verb.addJournalPhotos': 'Thêm ảnh từ thư viện',
'assistant.card.journeyPhotos.cover': 'Ảnh bìa của mục',
'assistant.card.journeyPhotos.firstIsCover': 'Ảnh đầu tiên sẽ thành ảnh bìa của mục.',
'assistant.card.journeyPhotos.kept': 'Ảnh vẫn được giữ ở mục đầu tiên.',
'assistant.card.journeyPhotos.staysInGallery': 'Ảnh vẫn ở trong thư viện ảnh của nhật ký.',
'assistant.card.journeyPhotos.fromLibrary': 'Từ thư viện ảnh của bạn; nhật ký chỉ lưu liên kết tham chiếu.',
};
export default assistantJourney;
+11
View File
@@ -50,5 +50,16 @@ const assistantJourney: TranslationStrings = {
'assistant.change.verb.reorderJournalEntries': '重新排列條目',
'assistant.card.journey.pros': '{count} 個優點',
'assistant.card.journey.cons': '{count} 個不足',
'assistant.change.verb.linkJournalPhoto': '將照片放到條目上',
'assistant.change.verb.unlinkJournalPhoto': '從條目上移除照片',
'assistant.change.verb.moveJournalPhotos': '將照片移到另一個條目',
'assistant.change.verb.orderJournalPhotos': '重新排列條目的照片',
'assistant.change.verb.captionJournalPhoto': '變更照片說明',
'assistant.change.verb.addJournalPhotos': '從圖庫加入照片',
'assistant.card.journeyPhotos.cover': '條目封面',
'assistant.card.journeyPhotos.firstIsCover': '第一張照片會成為條目封面。',
'assistant.card.journeyPhotos.kept': '它們也會保留在第一個條目上。',
'assistant.card.journeyPhotos.staysInGallery': '照片會保留在日誌圖庫中。',
'assistant.card.journeyPhotos.fromLibrary': '來自你的照片圖庫,日誌只保存參照。',
};
export default assistantJourney;
+11
View File
@@ -50,5 +50,16 @@ const assistantJourney: TranslationStrings = {
'assistant.change.verb.reorderJournalEntries': '重新排列条目',
'assistant.card.journey.pros': '{count} 个优点',
'assistant.card.journey.cons': '{count} 个不足',
'assistant.change.verb.linkJournalPhoto': '将照片放到条目上',
'assistant.change.verb.unlinkJournalPhoto': '从条目上移除照片',
'assistant.change.verb.moveJournalPhotos': '将照片移到另一个条目',
'assistant.change.verb.orderJournalPhotos': '重新排列条目的照片',
'assistant.change.verb.captionJournalPhoto': '更改照片说明',
'assistant.change.verb.addJournalPhotos': '从图库添加照片',
'assistant.card.journeyPhotos.cover': '条目封面',
'assistant.card.journeyPhotos.firstIsCover': '第一张照片会成为条目封面。',
'assistant.card.journeyPhotos.kept': '它们也会保留在第一个条目上。',
'assistant.card.journeyPhotos.staysInGallery': '照片会保留在日志图库中。',
'assistant.card.journeyPhotos.fromLibrary': '来自你的照片图库,日志只保存引用。',
};
export default assistantJourney;