added poll duration time, layout fix, bug fix
This commit is contained in:
parent
20079c4ec2
commit
ae349e0125
|
@ -94,7 +94,7 @@ public class MastodonPoll implements Poll {
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public long expirationTime() {
|
public long getEndTime() {
|
||||||
return exTime;
|
return exTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -127,7 +127,7 @@ public class MastodonPoll implements Poll {
|
||||||
optionsBuf.append(option).append(',');
|
optionsBuf.append(option).append(',');
|
||||||
optionsBuf.deleteCharAt(optionsBuf.length() - 1).append(')');
|
optionsBuf.deleteCharAt(optionsBuf.length() - 1).append(')');
|
||||||
}
|
}
|
||||||
return "id=" + getId() + " expired=" + expirationTime() + optionsBuf;
|
return "id=" + getId() + " expired=" + getEndTime() + optionsBuf;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -81,7 +81,7 @@ public class PollV2 implements Poll {
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public long expirationTime() {
|
public long getEndTime() {
|
||||||
return expiredAt;
|
return expiredAt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -114,7 +114,7 @@ public class PollV2 implements Poll {
|
||||||
optionsBuf.append(option).append(',');
|
optionsBuf.append(option).append(',');
|
||||||
optionsBuf.deleteCharAt(optionsBuf.length() - 1).append(')');
|
optionsBuf.deleteCharAt(optionsBuf.length() - 1).append(')');
|
||||||
}
|
}
|
||||||
return "id=" + getId() + " expired=" + expirationTime() + optionsBuf;
|
return "id=" + getId() + " expired=" + getEndTime() + optionsBuf;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -24,7 +24,7 @@ public class LinkUtils {
|
||||||
/**
|
/**
|
||||||
* regex pattern of a status URL
|
* regex pattern of a status URL
|
||||||
*/
|
*/
|
||||||
public static final Pattern TWITTER_LINK_PATTERN = Pattern.compile("https://twitter.com/\\w+/status/\\d+");
|
private static final Pattern TWITTER_LINK_PATTERN = Pattern.compile("https://twitter.com/\\w+/status/\\d+");
|
||||||
|
|
||||||
private LinkUtils() {}
|
private LinkUtils() {}
|
||||||
|
|
||||||
|
|
|
@ -90,27 +90,58 @@ public class StringUtils {
|
||||||
}
|
}
|
||||||
if (diff > 604800000L) { // more than a week
|
if (diff > 604800000L) { // more than a week
|
||||||
int number = (int) (diff / 604800000L);
|
int number = (int) (diff / 604800000L);
|
||||||
return resources.getQuantityString(R.plurals.n_weeks, number, number);
|
return resources.getQuantityString(R.plurals.weeks_ago, number, number);
|
||||||
}
|
}
|
||||||
if (diff > 86400000L) { // more than a day
|
if (diff > 86400000L) { // more than a day
|
||||||
int number = (int) (diff / 86400000L);
|
int number = (int) (diff / 86400000L);
|
||||||
return resources.getQuantityString(R.plurals.n_days, number, number);
|
return resources.getQuantityString(R.plurals.days_ago, number, number);
|
||||||
}
|
}
|
||||||
if (diff > 3600000L) { // more than a hour
|
if (diff > 3600000L) { // more than a hour
|
||||||
int number = (int) (diff / 3600000L);
|
int number = (int) (diff / 3600000L);
|
||||||
return resources.getQuantityString(R.plurals.n_hours, number, number);
|
return resources.getQuantityString(R.plurals.hours_ago, number, number);
|
||||||
}
|
}
|
||||||
if (diff / 60000L > 0L) { // more than a minute
|
if (diff / 60000L > 0L) { // more than a minute
|
||||||
int number = (int) (diff / 60000L);
|
int number = (int) (diff / 60000L);
|
||||||
return resources.getQuantityString(R.plurals.n_minutes, number, number);
|
return resources.getQuantityString(R.plurals.minutes_ago, number, number);
|
||||||
}
|
}
|
||||||
if (diff / 1000L > 0L) {
|
if (diff / 1000L > 0L) {
|
||||||
int number = (int) (diff / 1000L);
|
int number = (int) (diff / 1000L);
|
||||||
return resources.getQuantityString(R.plurals.n_seconds, number, number);
|
return resources.getQuantityString(R.plurals.seconds_ago, number, number);
|
||||||
}
|
}
|
||||||
return resources.getString(R.string.time_now);
|
return resources.getString(R.string.time_now);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* creates a time string from the difference between the current time and the given time
|
||||||
|
*
|
||||||
|
* @param time time value from which to create a difference
|
||||||
|
* @return time string showing the time difference
|
||||||
|
*/
|
||||||
|
public static String formatExpirationTime(Resources resources, long time) {
|
||||||
|
time = time - System.currentTimeMillis();
|
||||||
|
if (time > 604800000L) { // more than a week
|
||||||
|
int number = (int) (time / 604800000L);
|
||||||
|
return resources.getQuantityString(R.plurals.weeks_remain, number, number);
|
||||||
|
}
|
||||||
|
if (time > 86400000L) { // more than a day
|
||||||
|
int number = (int) (time / 86400000L);
|
||||||
|
return resources.getQuantityString(R.plurals.days_remain, number, number);
|
||||||
|
}
|
||||||
|
if (time > 3600000L) { // more than a hour
|
||||||
|
int number = (int) (time / 3600000L);
|
||||||
|
return resources.getQuantityString(R.plurals.hours_remain, number, number);
|
||||||
|
}
|
||||||
|
if (time / 60000L > 0L) { // more than a minute
|
||||||
|
int number = (int) (time / 60000L);
|
||||||
|
return resources.getQuantityString(R.plurals.minutes_remain, number, number);
|
||||||
|
}
|
||||||
|
if (time / 1000L > 0L) {
|
||||||
|
int number = (int) (time / 1000L);
|
||||||
|
return resources.getQuantityString(R.plurals.seconds_remain, number, number);
|
||||||
|
}
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* un-escape html based text
|
* un-escape html based text
|
||||||
*
|
*
|
||||||
|
|
|
@ -160,13 +160,4 @@ public class ConfigAccount implements Account {
|
||||||
return getUser().equals(account.getUser());
|
return getUser().equals(account.getUser());
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* override hostname
|
|
||||||
*
|
|
||||||
* @param hostname new hostname
|
|
||||||
*/
|
|
||||||
public void setHost(String hostname) {
|
|
||||||
this.hostname = hostname;
|
|
||||||
}
|
|
||||||
}
|
}
|
|
@ -1707,7 +1707,7 @@ public class AppDatabase {
|
||||||
}
|
}
|
||||||
column.put(PollTable.ID, poll.getId());
|
column.put(PollTable.ID, poll.getId());
|
||||||
column.put(PollTable.LIMIT, poll.getLimit());
|
column.put(PollTable.LIMIT, poll.getLimit());
|
||||||
column.put(PollTable.EXPIRATION, poll.expirationTime());
|
column.put(PollTable.EXPIRATION, poll.getEndTime());
|
||||||
column.put(PollTable.OPTIONS, buf.toString());
|
column.put(PollTable.OPTIONS, buf.toString());
|
||||||
db.insertWithOnConflict(PollTable.NAME, "", column, SQLiteDatabase.CONFLICT_REPLACE);
|
db.insertWithOnConflict(PollTable.NAME, "", column, SQLiteDatabase.CONFLICT_REPLACE);
|
||||||
}
|
}
|
||||||
|
|
|
@ -71,7 +71,7 @@ public class DatabasePoll implements Poll, PollTable {
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public long expirationTime() {
|
public long getEndTime() {
|
||||||
return expired;
|
return expired;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -104,7 +104,7 @@ public class DatabasePoll implements Poll, PollTable {
|
||||||
optionsBuf.append(option).append(',');
|
optionsBuf.append(option).append(',');
|
||||||
optionsBuf.deleteCharAt(optionsBuf.length() - 1).append(')');
|
optionsBuf.deleteCharAt(optionsBuf.length() - 1).append(')');
|
||||||
}
|
}
|
||||||
return "id=" + getId() + " expired=" + expirationTime() + optionsBuf;
|
return "id=" + getId() + " expired=" + getEndTime() + optionsBuf;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -32,7 +32,7 @@ public interface Poll extends Serializable {
|
||||||
/**
|
/**
|
||||||
* @return time where the poll expires
|
* @return time where the poll expires
|
||||||
*/
|
*/
|
||||||
long expirationTime();
|
long getEndTime();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return total number of votes
|
* @return total number of votes
|
||||||
|
|
|
@ -70,6 +70,7 @@ import org.nuclearfog.twidda.backend.image.PicassoBuilder;
|
||||||
import org.nuclearfog.twidda.backend.utils.LinkUtils;
|
import org.nuclearfog.twidda.backend.utils.LinkUtils;
|
||||||
import org.nuclearfog.twidda.backend.utils.StringUtils;
|
import org.nuclearfog.twidda.backend.utils.StringUtils;
|
||||||
import org.nuclearfog.twidda.backend.utils.EmojiUtils;
|
import org.nuclearfog.twidda.backend.utils.EmojiUtils;
|
||||||
|
import org.nuclearfog.twidda.config.Configuration;
|
||||||
import org.nuclearfog.twidda.config.GlobalSettings;
|
import org.nuclearfog.twidda.config.GlobalSettings;
|
||||||
import org.nuclearfog.twidda.model.Relation;
|
import org.nuclearfog.twidda.model.Relation;
|
||||||
import org.nuclearfog.twidda.model.User;
|
import org.nuclearfog.twidda.model.User;
|
||||||
|
@ -734,9 +735,12 @@ public class ProfileActivity extends AppCompatActivity implements ActivityResult
|
||||||
tabSelector.setLabel(1, "");
|
tabSelector.setLabel(1, "");
|
||||||
}
|
}
|
||||||
if (user_createdAt.getVisibility() != VISIBLE) {
|
if (user_createdAt.getVisibility() != VISIBLE) {
|
||||||
String date = SimpleDateFormat.getDateTimeInstance().format(user.getTimestamp());
|
|
||||||
user_createdAt.setVisibility(VISIBLE);
|
user_createdAt.setVisibility(VISIBLE);
|
||||||
user_createdAt.setText(date);
|
if (settings.getLogin().getConfiguration() == Configuration.MASTODON) {
|
||||||
|
user_createdAt.setText(SimpleDateFormat.getDateInstance().format(user.getTimestamp()));
|
||||||
|
} else {
|
||||||
|
user_createdAt.setText(SimpleDateFormat.getDateTimeInstance().format(user.getTimestamp()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (!user.getDescription().isEmpty()) {
|
if (!user.getDescription().isEmpty()) {
|
||||||
descriptionSpan = Tagger.makeTextWithLinks(user.getDescription(), settings.getHighlightColor(), this);
|
descriptionSpan = Tagger.makeTextWithLinks(user.getDescription(), settings.getHighlightColor(), this);
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package org.nuclearfog.twidda.ui.adapter.holder;
|
package org.nuclearfog.twidda.ui.adapter.holder;
|
||||||
|
|
||||||
|
import android.content.res.Resources;
|
||||||
import android.graphics.Typeface;
|
import android.graphics.Typeface;
|
||||||
import android.graphics.drawable.ColorDrawable;
|
import android.graphics.drawable.ColorDrawable;
|
||||||
import android.text.SpannableString;
|
import android.text.SpannableString;
|
||||||
|
@ -52,7 +53,9 @@ public class CardHolder extends ViewHolder implements OnClickListener {
|
||||||
private GlobalSettings settings;
|
private GlobalSettings settings;
|
||||||
private OnHolderClickListener listener;
|
private OnHolderClickListener listener;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
public CardHolder(ViewGroup parent, GlobalSettings settings, Picasso picasso, OnHolderClickListener listener) {
|
public CardHolder(ViewGroup parent, GlobalSettings settings, Picasso picasso, OnHolderClickListener listener) {
|
||||||
super(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_card, parent, false));
|
super(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_card, parent, false));
|
||||||
linkText = itemView.findViewById(R.id.link_preview_text);
|
linkText = itemView.findViewById(R.id.link_preview_text);
|
||||||
|
@ -61,7 +64,7 @@ public class CardHolder extends ViewHolder implements OnClickListener {
|
||||||
this.settings = settings;
|
this.settings = settings;
|
||||||
this.listener = listener;
|
this.listener = listener;
|
||||||
|
|
||||||
itemView.getLayoutParams().width = parent.getMeasuredHeight() * 16 / 9;
|
itemView.getLayoutParams().width = Resources.getSystem().getDisplayMetrics().widthPixels * 2 / 3;
|
||||||
linkText.setTypeface(settings.getTypeFace());
|
linkText.setTypeface(settings.getTypeFace());
|
||||||
linkText.setTextColor(settings.getTextColor());
|
linkText.setTextColor(settings.getTextColor());
|
||||||
linkText.setBackgroundColor(settings.getBackgroundColor() & TEXT_TRANSPARENCY);
|
linkText.setBackgroundColor(settings.getBackgroundColor() & TEXT_TRANSPARENCY);
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package org.nuclearfog.twidda.ui.adapter.holder;
|
package org.nuclearfog.twidda.ui.adapter.holder;
|
||||||
|
|
||||||
|
import android.content.res.Resources;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.View.OnClickListener;
|
import android.view.View.OnClickListener;
|
||||||
|
@ -25,7 +26,7 @@ import org.nuclearfog.twidda.ui.adapter.OptionsAdapter;
|
||||||
*/
|
*/
|
||||||
public class PollHolder extends ViewHolder implements OnClickListener {
|
public class PollHolder extends ViewHolder implements OnClickListener {
|
||||||
|
|
||||||
private TextView votesCount;
|
private TextView votesCount, expiration;
|
||||||
private Button voteButton;
|
private Button voteButton;
|
||||||
|
|
||||||
private OptionsAdapter adapter;
|
private OptionsAdapter adapter;
|
||||||
|
@ -40,13 +41,16 @@ public class PollHolder extends ViewHolder implements OnClickListener {
|
||||||
RecyclerView optionsList = itemView.findViewById(R.id.item_poll_options_list);
|
RecyclerView optionsList = itemView.findViewById(R.id.item_poll_options_list);
|
||||||
voteButton = itemView.findViewById(R.id.item_poll_vote_button);
|
voteButton = itemView.findViewById(R.id.item_poll_vote_button);
|
||||||
votesCount = itemView.findViewById(R.id.item_poll_votes_count);
|
votesCount = itemView.findViewById(R.id.item_poll_votes_count);
|
||||||
|
expiration = itemView.findViewById(R.id.item_poll_expiration);
|
||||||
adapter = new OptionsAdapter(settings);
|
adapter = new OptionsAdapter(settings);
|
||||||
this.listener = listener;
|
this.listener = listener;
|
||||||
|
|
||||||
cardBackground.setCardBackgroundColor(settings.getCardColor());
|
cardBackground.setCardBackgroundColor(settings.getCardColor());
|
||||||
votesCount.setTextColor(settings.getTextColor());
|
votesCount.setTextColor(settings.getTextColor());
|
||||||
votesCount.setTypeface(settings.getTypeFace());
|
votesCount.setTypeface(settings.getTypeFace());
|
||||||
itemView.getLayoutParams().width = parent.getMeasuredHeight() * 2; // 2:1 ratio
|
expiration.setTextColor(settings.getTextColor());
|
||||||
|
expiration.setTypeface(settings.getTypeFace());
|
||||||
|
itemView.getLayoutParams().width = Resources.getSystem().getDisplayMetrics().widthPixels * 2 / 3;
|
||||||
|
|
||||||
optionsList.setAdapter(adapter);
|
optionsList.setAdapter(adapter);
|
||||||
optionsList.setItemAnimator(null); // disable animation
|
optionsList.setItemAnimator(null); // disable animation
|
||||||
|
@ -75,12 +79,14 @@ public class PollHolder extends ViewHolder implements OnClickListener {
|
||||||
*/
|
*/
|
||||||
public void setContent(Poll poll) {
|
public void setContent(Poll poll) {
|
||||||
if (poll.closed()) {
|
if (poll.closed()) {
|
||||||
votesCount.setText(R.string.poll_finished);
|
votesCount.setText(R.string.poll_total_votes);
|
||||||
|
expiration.setText(R.string.poll_finished);
|
||||||
voteButton.setVisibility(View.GONE);
|
voteButton.setVisibility(View.GONE);
|
||||||
} else {
|
} else {
|
||||||
votesCount.setText(R.string.poll_total_votes);
|
votesCount.setText(R.string.poll_total_votes);
|
||||||
|
expiration.setText(StringUtils.formatExpirationTime(expiration.getResources(), poll.getEndTime()));
|
||||||
if (poll.voted()) {
|
if (poll.voted()) {
|
||||||
voteButton.setVisibility(View.GONE);
|
voteButton.setVisibility(View.INVISIBLE);
|
||||||
} else if (poll.getLimit() > 0) {
|
} else if (poll.getLimit() > 0) {
|
||||||
voteButton.setVisibility(View.VISIBLE);
|
voteButton.setVisibility(View.VISIBLE);
|
||||||
}
|
}
|
||||||
|
|
|
@ -42,16 +42,6 @@ public class ConfirmDialog extends Dialog implements OnClickListener {
|
||||||
*/
|
*/
|
||||||
public static final int REMOVE_ACCOUNT = 604;
|
public static final int REMOVE_ACCOUNT = 604;
|
||||||
|
|
||||||
/**
|
|
||||||
* show "proxy bypass" dialog
|
|
||||||
*/
|
|
||||||
public static final int PROXY_CONFIRM = 605;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* show "video error" dialog
|
|
||||||
*/
|
|
||||||
public static final int VIDEO_ERROR = 606;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* show dialog to delete status
|
* show dialog to delete status
|
||||||
*/
|
*/
|
||||||
|
@ -216,14 +206,6 @@ public class ConfirmDialog extends Dialog implements OnClickListener {
|
||||||
messageRes = R.string.confirm_log_lout;
|
messageRes = R.string.confirm_log_lout;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case VIDEO_ERROR:
|
|
||||||
titleVis = View.VISIBLE;
|
|
||||||
messageRes = R.string.error_cant_load_video;
|
|
||||||
confirmIconRes = 0;
|
|
||||||
confirmRes = R.string.confirm_open_link;
|
|
||||||
cancelVis = View.GONE;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case LIST_EDITOR_LEAVE:
|
case LIST_EDITOR_LEAVE:
|
||||||
case PROFILE_EDITOR_LEAVE:
|
case PROFILE_EDITOR_LEAVE:
|
||||||
messageRes = R.string.confirm_discard;
|
messageRes = R.string.confirm_discard;
|
||||||
|
@ -281,12 +263,6 @@ public class ConfirmDialog extends Dialog implements OnClickListener {
|
||||||
case REMOVE_ACCOUNT:
|
case REMOVE_ACCOUNT:
|
||||||
messageRes = R.string.confirm_remove_account;
|
messageRes = R.string.confirm_remove_account;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PROXY_CONFIRM:
|
|
||||||
titleVis = View.VISIBLE;
|
|
||||||
titleRes = R.string.dialog_confirm_warning;
|
|
||||||
messageRes = R.string.dialog_warning_videoview;
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
// setup title
|
// setup title
|
||||||
title.setVisibility(titleVis);
|
title.setVisibility(titleVis);
|
||||||
|
|
|
@ -27,14 +27,11 @@ import org.nuclearfog.twidda.ui.activities.ImageViewer;
|
||||||
import org.nuclearfog.twidda.ui.activities.MessageEditor;
|
import org.nuclearfog.twidda.ui.activities.MessageEditor;
|
||||||
import org.nuclearfog.twidda.ui.activities.ProfileActivity;
|
import org.nuclearfog.twidda.ui.activities.ProfileActivity;
|
||||||
import org.nuclearfog.twidda.ui.activities.SearchActivity;
|
import org.nuclearfog.twidda.ui.activities.SearchActivity;
|
||||||
import org.nuclearfog.twidda.ui.activities.StatusActivity;
|
|
||||||
import org.nuclearfog.twidda.ui.adapter.MessageAdapter;
|
import org.nuclearfog.twidda.ui.adapter.MessageAdapter;
|
||||||
import org.nuclearfog.twidda.ui.adapter.MessageAdapter.OnMessageClickListener;
|
import org.nuclearfog.twidda.ui.adapter.MessageAdapter.OnMessageClickListener;
|
||||||
import org.nuclearfog.twidda.ui.dialogs.ConfirmDialog;
|
import org.nuclearfog.twidda.ui.dialogs.ConfirmDialog;
|
||||||
import org.nuclearfog.twidda.ui.dialogs.ConfirmDialog.OnConfirmListener;
|
import org.nuclearfog.twidda.ui.dialogs.ConfirmDialog.OnConfirmListener;
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fragment class to show a list of directmessages
|
* Fragment class to show a list of directmessages
|
||||||
*
|
*
|
||||||
|
|
|
@ -32,6 +32,14 @@
|
||||||
android:lines="1"
|
android:lines="1"
|
||||||
android:layout_weight="1" />
|
android:layout_weight="1" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/item_poll_expiration"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:textSize="@dimen/item_poll_text_size"
|
||||||
|
android:lines="1"
|
||||||
|
android:layout_weight="1" />
|
||||||
|
|
||||||
<Button
|
<Button
|
||||||
android:id="@+id/item_poll_vote_button"
|
android:id="@+id/item_poll_vote_button"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
|
|
|
@ -1,29 +1,54 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||||
|
|
||||||
<plurals name="n_seconds">
|
<plurals name="seconds_ago">
|
||||||
<item quantity="one">vor <xliff:g id="count">%d</xliff:g> Sek.</item>
|
<item quantity="one">vor <xliff:g id="count">%d</xliff:g> Sek.</item>
|
||||||
<item quantity="other">vor <xliff:g id="count">%d</xliff:g> Sek.</item>
|
<item quantity="other">vor <xliff:g id="count">%d</xliff:g> Sek.</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
|
|
||||||
<plurals name="n_minutes">
|
<plurals name="minutes_ago">
|
||||||
<item quantity="one">vor <xliff:g id="count">%d</xliff:g> Min.</item>
|
<item quantity="one">vor <xliff:g id="count">%d</xliff:g> Min.</item>
|
||||||
<item quantity="other">vor <xliff:g id="count">%d</xliff:g> Min.</item>
|
<item quantity="other">vor <xliff:g id="count">%d</xliff:g> Min.</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
|
|
||||||
<plurals name="n_hours">
|
<plurals name="hours_ago">
|
||||||
<item quantity="one">vor <xliff:g id="count">%d</xliff:g> Std.</item>
|
<item quantity="one">vor <xliff:g id="count">%d</xliff:g> Std.</item>
|
||||||
<item quantity="other">vor <xliff:g id="count">%d</xliff:g> Std.</item>
|
<item quantity="other">vor <xliff:g id="count">%d</xliff:g> Std.</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
|
|
||||||
<plurals name="n_days">
|
<plurals name="days_ago">
|
||||||
<item quantity="one">vor <xliff:g id="count">%d</xliff:g> Tag</item>
|
<item quantity="one">vor <xliff:g id="count">%d</xliff:g> Tag</item>
|
||||||
<item quantity="other">vor <xliff:g id="count">%d</xliff:g> Tagen</item>
|
<item quantity="other">vor <xliff:g id="count">%d</xliff:g> Tagen</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
|
|
||||||
<plurals name="n_weeks">
|
<plurals name="weeks_ago">
|
||||||
<item quantity="one">vor <xliff:g id="count">%d</xliff:g> Woche</item>
|
<item quantity="one">vor <xliff:g id="count">%d</xliff:g> Woche</item>
|
||||||
<item quantity="other">vor <xliff:g id="count">%d</xliff:g> Wochen</item>
|
<item quantity="other">vor <xliff:g id="count">%d</xliff:g> Wochen</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
|
|
||||||
|
<plurals name="seconds_remain">
|
||||||
|
<item quantity="one">noch <xliff:g id="count">%d</xliff:g> Sekunde</item>
|
||||||
|
<item quantity="other">noch <xliff:g id="count">%d</xliff:g> Sekunden</item>
|
||||||
|
</plurals>
|
||||||
|
|
||||||
|
<plurals name="minutes_remain">
|
||||||
|
<item quantity="one">noch <xliff:g id="count">%d</xliff:g> Minute</item>
|
||||||
|
<item quantity="other">noch <xliff:g id="count">%d</xliff:g> Minuten</item>
|
||||||
|
</plurals>
|
||||||
|
|
||||||
|
<plurals name="hours_remain">
|
||||||
|
<item quantity="one">noch <xliff:g id="count">%d</xliff:g> Stunde</item>
|
||||||
|
<item quantity="other">noch <xliff:g id="count">%d</xliff:g> Stunden</item>
|
||||||
|
</plurals>
|
||||||
|
|
||||||
|
<plurals name="days_remain">
|
||||||
|
<item quantity="one">noch <xliff:g id="count">%d</xliff:g> Tag</item>
|
||||||
|
<item quantity="other">noch <xliff:g id="count">%d</xliff:g> Tage</item>
|
||||||
|
</plurals>
|
||||||
|
|
||||||
|
<plurals name="weeks_remain">
|
||||||
|
<item quantity="one">noch <xliff:g id="count">%d</xliff:g> Woche</item>
|
||||||
|
<item quantity="other">noch <xliff:g id="count">%d</xliff:g> Wochen</item>
|
||||||
|
</plurals>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
|
@ -1,29 +1,54 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||||
|
|
||||||
<plurals name="n_seconds">
|
<plurals name="seconds_ago">
|
||||||
<item quantity="one"><xliff:g id="count">%d</xliff:g> second ago</item>
|
<item quantity="one"><xliff:g id="count">%d</xliff:g> second ago</item>
|
||||||
<item quantity="other"><xliff:g id="count">%d</xliff:g> seconds ago</item>
|
<item quantity="other"><xliff:g id="count">%d</xliff:g> seconds ago</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
|
|
||||||
<plurals name="n_minutes">
|
<plurals name="minutes_ago">
|
||||||
<item quantity="one"><xliff:g id="count">%d</xliff:g> minute ago</item>
|
<item quantity="one"><xliff:g id="count">%d</xliff:g> minute ago</item>
|
||||||
<item quantity="other"><xliff:g id="count">%d</xliff:g> minutes ago</item>
|
<item quantity="other"><xliff:g id="count">%d</xliff:g> minutes ago</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
|
|
||||||
<plurals name="n_hours">
|
<plurals name="hours_ago">
|
||||||
<item quantity="one"><xliff:g id="count">%d</xliff:g> hour ago</item>
|
<item quantity="one"><xliff:g id="count">%d</xliff:g> hour ago</item>
|
||||||
<item quantity="other"><xliff:g id="count">%d</xliff:g> hours ago</item>
|
<item quantity="other"><xliff:g id="count">%d</xliff:g> hours ago</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
|
|
||||||
<plurals name="n_days">
|
<plurals name="days_ago">
|
||||||
<item quantity="one"><xliff:g id="count">%d</xliff:g> day ago</item>
|
<item quantity="one"><xliff:g id="count">%d</xliff:g> day ago</item>
|
||||||
<item quantity="other"><xliff:g id="count">%d</xliff:g> days ago</item>
|
<item quantity="other"><xliff:g id="count">%d</xliff:g> days ago</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
|
|
||||||
<plurals name="n_weeks">
|
<plurals name="weeks_ago">
|
||||||
<item quantity="one"><xliff:g id="count">%d</xliff:g> week ago</item>
|
<item quantity="one"><xliff:g id="count">%d</xliff:g> week ago</item>
|
||||||
<item quantity="other"><xliff:g id="count">%d</xliff:g> weeks ago</item>
|
<item quantity="other"><xliff:g id="count">%d</xliff:g> weeks ago</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
|
|
||||||
|
<plurals name="seconds_remain">
|
||||||
|
<item quantity="one"><xliff:g id="count">%d</xliff:g> second remains</item>
|
||||||
|
<item quantity="other"><xliff:g id="count">%d</xliff:g> seconds remain</item>
|
||||||
|
</plurals>
|
||||||
|
|
||||||
|
<plurals name="minutes_remain">
|
||||||
|
<item quantity="one"><xliff:g id="count">%d</xliff:g> minute remains</item>
|
||||||
|
<item quantity="other"><xliff:g id="count">%d</xliff:g> minutes remain</item>
|
||||||
|
</plurals>
|
||||||
|
|
||||||
|
<plurals name="hours_remain">
|
||||||
|
<item quantity="one"><xliff:g id="count">%d</xliff:g> hour remains</item>
|
||||||
|
<item quantity="other"><xliff:g id="count">%d</xliff:g> hours remain</item>
|
||||||
|
</plurals>
|
||||||
|
|
||||||
|
<plurals name="days_remain">
|
||||||
|
<item quantity="one"><xliff:g id="count">%d</xliff:g> day remains</item>
|
||||||
|
<item quantity="other"><xliff:g id="count">%d</xliff:g> days remain</item>
|
||||||
|
</plurals>
|
||||||
|
|
||||||
|
<plurals name="weeks_remain">
|
||||||
|
<item quantity="one"><xliff:g id="count">%d</xliff:g> week remains</item>
|
||||||
|
<item quantity="other"><xliff:g id="count">%d</xliff:g> weeks remain</item>
|
||||||
|
</plurals>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
Loading…
Reference in New Issue