@ -1,48 +1,43 @@ | |||
<?xml version="1.0" encoding="utf-8"?> | |||
<!-- Generator: Adobe Illustrator 22.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> | |||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" | |||
viewBox="0 0 181.4 181.9" style="enable-background:new 0 0 181.4 181.9;" xml:space="preserve"> | |||
<style type="text/css"> | |||
.st0{fill:url(#SVGID_1_);} | |||
.st1{fill:#F094BE;} | |||
.st2{fill:#4D3F92;} | |||
.st3{fill:#FFFFFF;} | |||
</style> | |||
<g id="Capa_1"> | |||
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="90.891" y1="0.2799" x2="90.891" y2="181.8763"> | |||
<stop offset="0" style="stop-color:#F6BFD9"/> | |||
<stop offset="0.9951" style="stop-color:#F3A8CA"/> | |||
</linearGradient> | |||
<rect x="0.1" y="0.3" class="st0" width="181.6" height="181.6"/> | |||
<path class="st1" d="M181.7,37.6v144.3H0.1v-37.3c0,0,2-1.4,5.5-3.8C36,119.6,181.7,19.2,181.7,37.6z"/> | |||
</g> | |||
<g id="Capa_2"> | |||
<g> | |||
<path class="st2" d="M151.6,95.1c1.5-0.3,2.8-1,3.8-2c4-5.3,0.8-11.8-4.5-12.6c-0.8,0-1.5-0.8-1.5-1.5c0-0.3,0-0.5,0-0.5 | |||
c0.8-0.8,1.5-1.8,2.5-3.3c8.1-10.8,11.8-50.6,3.8-53.7c-9.8-3.3-29.7,6.3-38.3,17.4c-0.5-0.3-1-1-1-1.8c0.3-3-1.3-5.5-3.5-6.8 | |||
c-4.5-2.3-8.8,0-10.6,3.3c-0.5,0.8-1.3,1.3-2,1c-0.8,0-1.5-0.8-1.5-1.5c-0.5-2.5-2-4.5-4.3-5.5c-4.8-2-9.8,0.8-10.6,5.3 | |||
c-0.3,0.8-0.8,1.5-1.5,1.5c-0.8,0.3-1.5-0.3-2-1c-1.5-2.3-4-3.8-6.5-3.8c-4,0-7.6,3.3-7.8,7.3v0.3v0.3c0,0.8-0.5,1.5-1,1.8h-0.3 | |||
c-8.3-10.8-28.5-20.7-38.5-17.4c-8.1,2.8-4.3,42.6,4,53.4c1.5,2,2.8,3.5,3.8,4.5c-0.3,0.8-1,1.5-1.8,1.5c-1.3,0-2.5,0.5-3.5,1.3 | |||
c-5.3,5-2.3,12.1,3,13.4c0.8,0.3,1.5,1,1.5,1.8c0,0.8-0.5,1.8-1.3,2c-1,0.5-2,1-2.8,2c-4,5.8,0,12.3,5.5,12.3 | |||
c0.8,0,1.5,0.5,1.8,1.3c0.3,0.8,0.3,1.5-0.5,2c-1.5,1.5-2.3,3.5-2,5.5c0.3,2.8,2,5.3,4.8,6.5c1.5,0.8,3,0.8,4.5,0.5 | |||
c0.8-0.3,1.5,0,2,0.8c0.5,0.5,0.5,1.5,0.3,2c-0.8,1.5-1,3.3-0.5,5c0.8,2.8,2.8,4.8,5.5,5.5c2.5,0.5,4.3-0.3,5.5-0.8 | |||
c0.5-0.3-3.3,9.1-6,15.4c-0.8,2,1.3,4.3,3.5,3.3c8.3-3.8,22.2-10.3,22.2-9.8c0.5,5.3,6.5,9.1,12.3,5.3c1.3-0.8,2-2.3,2.3-3.5 | |||
c0.3-0.8,1-1.5,2-1.5c1,0,1.8,0.5,2,1.5c0.3,1.3,0.8,2.3,1.8,3c5.8,4.5,12.3,0.8,12.8-4.8c0-0.8,0.5-1.5,1.3-1.8 | |||
c0.8-0.3,1.5,0,2,0.5c1.5,1.5,3.3,2.5,5.3,2.5l0,0c2.5,0,5-1.3,6.5-3.8c1-1.5,1.3-3,1-5c0-0.8,0.3-1.5,0.8-2c0.5-0.5,1.5-0.5,2,0 | |||
c1.5,0.8,3.3,1.3,5,0.8c2.8-0.5,5-2.8,5.8-5.3c0.5-1.8,0.3-3.5-0.5-5.3c-0.3-0.8-0.3-1.5,0.3-2s1.3-0.8,2-0.8 | |||
c1.8,0.3,3.3,0.3,4.8-0.5c2.3-1,3.8-3,4.3-5.5c0.5-2.5-0.3-4.8-2-6.5c-0.5-0.5-0.8-1.3-0.5-2s1-1.3,1.8-1.3c1.8,0,3.8-0.5,5-2 | |||
c4.3-4.5,2.3-10.6-2.5-12.6c-0.8-0.3-1.3-1-1.3-2C150.1,95.8,150.8,95.1,151.6,95.1z"/> | |||
<path class="st3" d="M131.4,42.2c0.5,1.5,0.5,3,0,4.5c-0.3,0.8,0,1.5,0.5,2s1.3,0.8,2,0.5c1-0.5,2-0.5,3-0.5c2.3,0,4.3,1,5.8,3 | |||
c1,1.3,1.8,3,1.5,4.8c0,1.5-0.5,2.8-1.3,4c-0.5,0.5-0.5,1.5,0,2c0.3,0.3,0.5,0.8,1,0.8c1-0.3,2-1,2.8-2c4.5-6.3,5.3-26.2,0.8-27.7 | |||
c-4.5-1.5-12.3,1.5-17.9,6C130.7,40.1,131.2,40.9,131.4,42.2z"/> | |||
<path class="st3" d="M39,63.6c0.3-0.3,0.5-0.5,0.8-0.8c0.5-0.8,0.3-1.5,0-2C38.5,59,38.2,57,38.5,55c0.5-2.8,2.8-5,5.5-5.8 | |||
c1.5-0.5,3-0.3,4.5,0.3c0.8,0.3,1.5,0,2-0.5c0.5-0.5,0.8-1.3,0.5-2c-0.5-1.5-0.5-3,0-4.5c0.3-1,0.8-2,1.5-2.8 | |||
c-5.5-4.5-13.9-7.8-18.4-6.3S30.4,54.8,35,61.1C36,62.6,37.2,63.3,39,63.6z"/> | |||
<g> | |||
<circle class="st3" cx="60.9" cy="94.6" r="9.3"/> | |||
<path class="st3" d="M100.7,94.6c0,5.3-4.3,9.3-9.3,9.3c-5.3,0-9.3-4.3-9.3-9.3S100.7,89.3,100.7,94.6z"/> | |||
<circle class="st3" cx="121.6" cy="94.6" r="9.3"/> | |||
</g> | |||
</g> | |||
</g> | |||
</svg> | |||
<?xml version="1.0" encoding="utf-8"?> | |||
<!-- Generator: Adobe Illustrator 22.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> | |||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" | |||
viewBox="0 0 181.4 181.9" style="enable-background:new 0 0 181.4 181.9;" xml:space="preserve"> | |||
<style type="text/css"> | |||
.st0{fill:url(#SVGID_1_);} | |||
.st1{fill:#F094BE;} | |||
.st2{fill:#4D3F92;} | |||
.st3{fill:#FFFFFF;} | |||
</style> | |||
<g id="Capa_1"> | |||
<rect x="0" y="0" style="color:#FFFFFF" width="181.4" height="181.9" class="st3"/> | |||
</g> | |||
<g id="Capa_2"> | |||
<g> | |||
<path class="st2" d="M151.6,95.1c1.5-0.3,2.8-1,3.8-2c4-5.3,0.8-11.8-4.5-12.6c-0.8,0-1.5-0.8-1.5-1.5c0-0.3,0-0.5,0-0.5 | |||
c0.8-0.8,1.5-1.8,2.5-3.3c8.1-10.8,11.8-50.6,3.8-53.7c-9.8-3.3-29.7,6.3-38.3,17.4c-0.5-0.3-1-1-1-1.8c0.3-3-1.3-5.5-3.5-6.8 | |||
c-4.5-2.3-8.8,0-10.6,3.3c-0.5,0.8-1.3,1.3-2,1c-0.8,0-1.5-0.8-1.5-1.5c-0.5-2.5-2-4.5-4.3-5.5c-4.8-2-9.8,0.8-10.6,5.3 | |||
c-0.3,0.8-0.8,1.5-1.5,1.5c-0.8,0.3-1.5-0.3-2-1c-1.5-2.3-4-3.8-6.5-3.8c-4,0-7.6,3.3-7.8,7.3v0.3v0.3c0,0.8-0.5,1.5-1,1.8h-0.3 | |||
c-8.3-10.8-28.5-20.7-38.5-17.4c-8.1,2.8-4.3,42.6,4,53.4c1.5,2,2.8,3.5,3.8,4.5c-0.3,0.8-1,1.5-1.8,1.5c-1.3,0-2.5,0.5-3.5,1.3 | |||
c-5.3,5-2.3,12.1,3,13.4c0.8,0.3,1.5,1,1.5,1.8c0,0.8-0.5,1.8-1.3,2c-1,0.5-2,1-2.8,2c-4,5.8,0,12.3,5.5,12.3 | |||
c0.8,0,1.5,0.5,1.8,1.3c0.3,0.8,0.3,1.5-0.5,2c-1.5,1.5-2.3,3.5-2,5.5c0.3,2.8,2,5.3,4.8,6.5c1.5,0.8,3,0.8,4.5,0.5 | |||
c0.8-0.3,1.5,0,2,0.8c0.5,0.5,0.5,1.5,0.3,2c-0.8,1.5-1,3.3-0.5,5c0.8,2.8,2.8,4.8,5.5,5.5c2.5,0.5,4.3-0.3,5.5-0.8 | |||
c0.5-0.3-3.3,9.1-6,15.4c-0.8,2,1.3,4.3,3.5,3.3c8.3-3.8,22.2-10.3,22.2-9.8c0.5,5.3,6.5,9.1,12.3,5.3c1.3-0.8,2-2.3,2.3-3.5 | |||
c0.3-0.8,1-1.5,2-1.5c1,0,1.8,0.5,2,1.5c0.3,1.3,0.8,2.3,1.8,3c5.8,4.5,12.3,0.8,12.8-4.8c0-0.8,0.5-1.5,1.3-1.8 | |||
c0.8-0.3,1.5,0,2,0.5c1.5,1.5,3.3,2.5,5.3,2.5l0,0c2.5,0,5-1.3,6.5-3.8c1-1.5,1.3-3,1-5c0-0.8,0.3-1.5,0.8-2c0.5-0.5,1.5-0.5,2,0 | |||
c1.5,0.8,3.3,1.3,5,0.8c2.8-0.5,5-2.8,5.8-5.3c0.5-1.8,0.3-3.5-0.5-5.3c-0.3-0.8-0.3-1.5,0.3-2s1.3-0.8,2-0.8 | |||
c1.8,0.3,3.3,0.3,4.8-0.5c2.3-1,3.8-3,4.3-5.5c0.5-2.5-0.3-4.8-2-6.5c-0.5-0.5-0.8-1.3-0.5-2s1-1.3,1.8-1.3c1.8,0,3.8-0.5,5-2 | |||
c4.3-4.5,2.3-10.6-2.5-12.6c-0.8-0.3-1.3-1-1.3-2C150.1,95.8,150.8,95.1,151.6,95.1z"/> | |||
<path class="st3" d="M131.4,42.2c0.5,1.5,0.5,3,0,4.5c-0.3,0.8,0,1.5,0.5,2s1.3,0.8,2,0.5c1-0.5,2-0.5,3-0.5c2.3,0,4.3,1,5.8,3 | |||
c1,1.3,1.8,3,1.5,4.8c0,1.5-0.5,2.8-1.3,4c-0.5,0.5-0.5,1.5,0,2c0.3,0.3,0.5,0.8,1,0.8c1-0.3,2-1,2.8-2c4.5-6.3,5.3-26.2,0.8-27.7 | |||
c-4.5-1.5-12.3,1.5-17.9,6C130.7,40.1,131.2,40.9,131.4,42.2z"/> | |||
<path class="st3" d="M39,63.6c0.3-0.3,0.5-0.5,0.8-0.8c0.5-0.8,0.3-1.5,0-2C38.5,59,38.2,57,38.5,55c0.5-2.8,2.8-5,5.5-5.8 | |||
c1.5-0.5,3-0.3,4.5,0.3c0.8,0.3,1.5,0,2-0.5c0.5-0.5,0.8-1.3,0.5-2c-0.5-1.5-0.5-3,0-4.5c0.3-1,0.8-2,1.5-2.8 | |||
c-5.5-4.5-13.9-7.8-18.4-6.3S30.4,54.8,35,61.1C36,62.6,37.2,63.3,39,63.6z"/> | |||
<g> | |||
<circle class="st3" cx="60.9" cy="94.6" r="9.3"/> | |||
<path class="st3" d="M100.7,94.6c0,5.3-4.3,9.3-9.3,9.3c-5.3,0-9.3-4.3-9.3-9.3S100.7,89.3,100.7,94.6z"/> | |||
<circle class="st3" cx="121.6" cy="94.6" r="9.3"/> | |||
</g> | |||
</g> | |||
</g> | |||
</svg> |
@ -1,84 +0,0 @@ | |||
import 'package:famedlysdk/famedlysdk.dart'; | |||
import 'package:flutter/material.dart'; | |||
import '../../utils/user_status.dart'; | |||
import '../../views/status_view.dart'; | |||
import '../avatar.dart'; | |||
import '../matrix.dart'; | |||
class StatusListItem extends StatelessWidget { | |||
final UserStatus status; | |||
const StatusListItem(this.status, {Key key}) : super(key: key); | |||
@override | |||
Widget build(BuildContext context) { | |||
final client = Matrix.of(context).client; | |||
return FutureBuilder<Profile>( | |||
future: client.getProfileFromUserId(status.userId), | |||
builder: (context, snapshot) { | |||
final profile = | |||
snapshot.data ?? Profile(status.userId.localpart, null); | |||
return InkWell( | |||
borderRadius: BorderRadius.circular(8), | |||
onTap: () => Navigator.of(context).push( | |||
MaterialPageRoute( | |||
builder: (_) => StatusView( | |||
status: status, | |||
avatarUrl: profile.avatarUrl, | |||
displayname: profile.displayname, | |||
), | |||
), | |||
), | |||
child: Container( | |||
width: 76, | |||
child: Column( | |||
children: <Widget>[ | |||
SizedBox(height: 10), | |||
Container( | |||
child: Stack( | |||
children: [ | |||
Avatar(profile.avatarUrl, profile.displayname), | |||
Positioned( | |||
bottom: 0, | |||
right: 0, | |||
child: Container( | |||
width: 10, | |||
height: 10, | |||
decoration: BoxDecoration( | |||
borderRadius: BorderRadius.circular(20), | |||
color: Colors.green, | |||
), | |||
), | |||
), | |||
], | |||
), | |||
decoration: BoxDecoration( | |||
border: Border.all( | |||
width: 1, | |||
color: Theme.of(context).primaryColor, | |||
), | |||
borderRadius: BorderRadius.circular(80), | |||
), | |||
padding: EdgeInsets.all(2), | |||
), | |||
Padding( | |||
padding: | |||
const EdgeInsets.only(left: 6.0, top: 0.0, right: 6.0), | |||
child: Text( | |||
profile.displayname.trim().split(' ').first, | |||
overflow: TextOverflow.clip, | |||
maxLines: 1, | |||
style: TextStyle( | |||
color: Theme.of(context).textTheme.bodyText2.color, | |||
fontSize: 13, | |||
), | |||
), | |||
), | |||
], | |||
), | |||
), | |||
); | |||
}); | |||
} | |||
} |
@ -0,0 +1,188 @@ | |||
import 'dart:math'; | |||
import 'package:famedlysdk/famedlysdk.dart'; | |||
import 'package:fluffychat/components/adaptive_page_layout.dart'; | |||
import 'package:fluffychat/utils/app_route.dart'; | |||
import 'package:fluffychat/utils/fluffy_share.dart'; | |||
import 'package:fluffychat/views/chat.dart'; | |||
import 'package:flutter/material.dart'; | |||
import 'content_banner.dart'; | |||
import 'package:flutter_gen/gen_l10n/l10n.dart'; | |||
import '../utils/presence_extension.dart'; | |||
import 'dialogs/simple_dialogs.dart'; | |||
import 'matrix.dart'; | |||
class UserBottomSheet extends StatelessWidget { | |||
final User user; | |||
final Function onMention; | |||
const UserBottomSheet({Key key, @required this.user, this.onMention}) | |||
: super(key: key); | |||
void participantAction(BuildContext context, String action) async { | |||
switch (action) { | |||
case 'mention': | |||
Navigator.of(context).pop(); | |||
onMention(); | |||
break; | |||
case 'ban': | |||
if (await SimpleDialogs(context).askConfirmation()) { | |||
await SimpleDialogs(context).tryRequestWithLoadingDialog(user.ban()); | |||
} | |||
break; | |||
case 'unban': | |||
if (await SimpleDialogs(context).askConfirmation()) { | |||
await SimpleDialogs(context) | |||
.tryRequestWithLoadingDialog(user.unban()); | |||
} | |||
break; | |||
case 'kick': | |||
if (await SimpleDialogs(context).askConfirmation()) { | |||
await SimpleDialogs(context).tryRequestWithLoadingDialog(user.kick()); | |||
} | |||
break; | |||
case 'admin': | |||
if (await SimpleDialogs(context).askConfirmation()) { | |||
await SimpleDialogs(context) | |||
.tryRequestWithLoadingDialog(user.setPower(100)); | |||
} | |||
break; | |||
case 'moderator': | |||
if (await SimpleDialogs(context).askConfirmation()) { | |||
await SimpleDialogs(context) | |||
.tryRequestWithLoadingDialog(user.setPower(50)); | |||
} | |||
break; | |||
case 'user': | |||
if (await SimpleDialogs(context).askConfirmation()) { | |||
await SimpleDialogs(context) | |||
.tryRequestWithLoadingDialog(user.setPower(0)); | |||
} | |||
break; | |||
case 'message': | |||
final roomId = await user.startDirectChat(); | |||
await Navigator.of(context).pushAndRemoveUntil( | |||
AppRoute.defaultRoute( | |||
context, | |||
ChatView(roomId), | |||
), | |||
(Route r) => r.isFirst); | |||
break; | |||
} | |||
} | |||
@override | |||
Widget build(BuildContext context) { | |||
final presence = Matrix.of(context).client.presences[user.id]; | |||
var items = <PopupMenuEntry<String>>[]; | |||
if (onMention != null) { | |||
items.add( | |||
PopupMenuItem(child: Text(L10n.of(context).mention), value: 'mention'), | |||
); | |||
} | |||
if (user.id != Matrix.of(context).client.userID) { | |||
items.add( | |||
PopupMenuItem( | |||
child: Text(L10n.of(context).sendAMessage), value: 'message'), | |||
); | |||
} | |||
if (user.canChangePowerLevel && | |||
user.room.ownPowerLevel == 100 && | |||
user.powerLevel != 100) { | |||
items.add( | |||
PopupMenuItem( | |||
child: Text(L10n.of(context).makeAnAdmin), value: 'admin'), | |||
); | |||
} | |||
if (user.canChangePowerLevel && | |||
user.room.ownPowerLevel >= 50 && | |||
user.powerLevel != 50) { | |||
items.add( | |||
PopupMenuItem( | |||
child: Text(L10n.of(context).makeAModerator), value: 'moderator'), | |||
); | |||
} | |||
if (user.canChangePowerLevel && user.powerLevel != 0) { | |||
items.add( | |||
PopupMenuItem( | |||
child: Text(L10n.of(context).revokeAllPermissions), value: 'user'), | |||
); | |||
} | |||
if (user.canKick) { | |||
items.add( | |||
PopupMenuItem( | |||
child: Text(L10n.of(context).kickFromChat), value: 'kick'), | |||
); | |||
} | |||
if (user.canBan && user.membership != Membership.ban) { | |||
items.add( | |||
PopupMenuItem(child: Text(L10n.of(context).banFromChat), value: 'ban'), | |||
); | |||
} else if (user.canBan && user.membership == Membership.ban) { | |||
items.add( | |||
PopupMenuItem( | |||
child: Text(L10n.of(context).removeExile), value: 'unban'), | |||
); | |||
} | |||
return Center( | |||
child: Container( | |||
width: min(MediaQuery.of(context).size.width, | |||
AdaptivePageLayout.defaultMinWidth * 1.5), | |||
child: SafeArea( | |||
child: Material( | |||
elevation: 4, | |||
child: Scaffold( | |||
extendBodyBehindAppBar: true, | |||
appBar: AppBar( | |||
elevation: 0, | |||
backgroundColor: | |||
Theme.of(context).scaffoldBackgroundColor.withOpacity(0.5), | |||
leading: IconButton( | |||
icon: Icon(Icons.arrow_downward_outlined), | |||
onPressed: Navigator.of(context).pop, | |||
), | |||
title: Text(user.calcDisplayname()), | |||
actions: [ | |||
if (user.id != Matrix.of(context).client.userID) | |||
PopupMenuButton( | |||
itemBuilder: (_) => items, | |||
onSelected: (action) => | |||
participantAction(context, action), | |||
), | |||
], | |||
), | |||
body: Column( | |||
children: [ | |||
Expanded( | |||
child: ContentBanner( | |||
user.avatarUrl, | |||
defaultIcon: Icons.person_outline, | |||
), | |||
), | |||
ListTile( | |||
title: Text(L10n.of(context).username), | |||
subtitle: Text(user.id), | |||
trailing: Icon(Icons.share), | |||
onTap: () => FluffyShare.share(user.id, context), | |||
), | |||
if (presence != null) | |||
ListTile( | |||
title: Text(presence.getLocalizedStatusMessage(context)), | |||
subtitle: | |||
Text(presence.getLocalizedLastActiveAgo(context)), | |||
trailing: Icon(Icons.circle, | |||
color: presence.presence.currentlyActive | |||
? Colors.green | |||
: Colors.grey), | |||
), | |||
], | |||
), | |||
), | |||
), | |||
), | |||
), | |||
); | |||
} | |||
} |
@ -0,0 +1 @@ | |||
{} |
@ -0,0 +1,98 @@ | |||
{ | |||
"blockDevice": "Thiแบฟt bแป bแป chแบทn", | |||
"@blockDevice": { | |||
"type": "text", | |||
"placeholders": {} | |||
}, | |||
"askSSSSCache": "Vui lรฒng nhแบญp cแปฅm mแบญt khแบฉu hoแบทc khรณa khรดi phแปฅc ฤแป lฦฐu khรณa vร o bแป nhแป cache.", | |||
"@askSSSSCache": { | |||
"type": "text", | |||
"placeholders": {} | |||
}, | |||
"areYouSure": "Bแบกn chแบฏc chแปฉ?", | |||
"@areYouSure": { | |||
"type": "text", | |||
"placeholders": {} | |||
}, | |||
"areGuestsAllowedToJoin": "Khรกch vรฃng lai cรณ ฤฦฐแปฃc tham gia khรดng", | |||
"@areGuestsAllowedToJoin": { | |||
"type": "text", | |||
"placeholders": {} | |||
}, | |||
"archivedRoom": "Phรฒng hแปi thแบฃo ฤรฃ lฦฐu trแปฏ", | |||
"@archivedRoom": { | |||
"type": "text", | |||
"placeholders": {} | |||
}, | |||
"archive": "Lฦฐu trแปฏ", | |||
"@archive": { | |||
"type": "text", | |||
"placeholders": {} | |||
}, | |||
"anyoneCanJoin": "Mแปi ngฦฐแปi ฤแปu cรณ thแป gia nhแบญp", | |||
"@anyoneCanJoin": { | |||
"type": "text", | |||
"placeholders": {} | |||
}, | |||
"answeredTheCall": "{senderName} ฤรฃ trแบฃ lแปi cuแปc gแปi", | |||
"@answeredTheCall": { | |||
"type": "text", | |||
"placeholders": { | |||
"senderName": {} | |||
} | |||
}, | |||
"alreadyHaveAnAccount": "Bแบกn ฤรฃ cรณ tร i khoแบฃn?", | |||
"@alreadyHaveAnAccount": { | |||
"type": "text", | |||
"placeholders": {} | |||
}, | |||
"alias": "bรญ danh", | |||
"@alias": { | |||
"type": "text", | |||
"placeholders": {} | |||
}, | |||
"admin": "Quแบฃn trแป viรชn", | |||
"@admin": { | |||
"type": "text", | |||
"placeholders": {} | |||
}, | |||
"addGroupDescription": "Thรชm mรด tแบฃ cho nhรณm", | |||
"@addGroupDescription": { | |||
"type": "text", | |||
"placeholders": {} | |||
}, | |||
"activatedEndToEndEncryption": "{username} ฤรฃ kรญch hoแบกt mรฃ hรณa ฤแบงu cuแปi 2 chiแปu", | |||
"@activatedEndToEndEncryption": { | |||
"type": "text", | |||
"placeholders": { | |||
"username": {} | |||
} | |||
}, | |||
"accountInformation": "Thรดng tin tร i khoแบฃn", | |||
"@accountInformation": { | |||
"type": "text", | |||
"placeholders": {} | |||
}, | |||
"account": "Tร i khoแบฃn", | |||
"@account": { | |||
"type": "text", | |||
"placeholders": {} | |||
}, | |||
"acceptedTheInvitation": "{username} ฤรฃ ฤแปng รฝ lแปi mแปi", | |||
"@acceptedTheInvitation": { | |||
"type": "text", | |||
"placeholders": { | |||
"username": {} | |||
} | |||
}, | |||
"accept": "ฤแปng รฝ", | |||
"@accept": { | |||
"type": "text", | |||
"placeholders": {} | |||
}, | |||
"about": "Giแปi thiแปu", | |||
"@about": { | |||
"type": "text", | |||
"placeholders": {} | |||
} | |||
} |