如何翻译你从android中的firebase获得的数据?*支持多语言

时间:2017-01-27 09:51:34

标签: android firebase firebase-realtime-database multilingual

我正在使用Android Studio中的应用程序。我设法将我的应用程序连接到firebase,我从中获取了一些英文图像和说明。由于我希望我的应用程序支持多种语言,有没有办法将这些数据从数据库转换为我的Android应用程序中的其他语言?

我知道如何使用strings.xml对静态数据进行处理,但我想知道如果从firebase加载数据,我可以这样做吗?

编辑***

我使用RecyclerView和CardView从firebase中提取图像及其描述。为了那个我使用:

  1. 图像类(POJO类)

  2. 图片适配器类

    public  class ImageAdapter extends RecyclerView.Adapter<ImageViewHolder> {
        ArrayList<Image> mImages;
    
        public ImageAdapter(ArrayList<Image> mAds)
        {
            this.mImages = mAds;
        }
    
        @Override
        public ImageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            View inflatedView = LayoutInflater.from(parent.getContext()).inflate(R.layout.image_item, parent, false);
            return new ImageViewHolder(inflatedView);
        }
    
        public void onBindViewHolder(ImageViewHolder holder, int position) {
            final Image image = mImages.get(position);
            holder.bindAd(image);
            holder.itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    //Toast.makeText(view.getContext(), "Hello", Toast.LENGTH_SHORT).show();
                    //Open New Activity show details about advertisment
                    Intent intent = new Intent(view.getContext(), ImageDetails.class);
                    intent.putExtra("ad",image);
    
                    view.getContext().startActivity(intent);
                }
            });
        }
    
        @Override
        public int getItemCount() {
            return mImages.size();
        }   
    }
    
  3. 图片视图持有者类:

    public class ImageViewHolder extends RecyclerView.ViewHolder {
    
        private ImageView mAdImage;
        private TextView mAdName;
    
        public ImageViewHolder(View itemView) {
            super(itemView);
            mAdImage = (ImageView) itemView.findViewById(R.id.ad_image);
            mAdName = (TextView) itemView.findViewById(R.id.ad_name);
        }
    
        public void bindAd(Image ad) {
            mAdName.setText(ad.name);
            Glide.with(mAdImage.getContext()).load(ad.image1).into(mAdImage);
        }
    }
    
  4. ImageDetails类(单击图像时,将打开其描述)

    public class ImageDetails extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.image_details);
            // TO DO
            //Ad ad = (Ad) savedInstanceState.getSerializable("ad");
            ImageView imageView = (ImageView) findViewById(R.id.imageAdDetails);
            TextView textView = (TextView) findViewById(R.id.textAdDetails);
            TextView textDesc = (TextView) findViewById(R.id.descriptionAdDetails);
    
            if (getIntent().hasExtra("ad")) {
                Image ad = (Image) getIntent().getSerializableExtra("ad");
                textView.setText(ad.name);
                textDesc.setText(ad.AdDescription);
                Glide.with(imageView.getContext()).load(ad.image1).into(imageView);
            }
        }
    }
    

1 个答案:

答案 0 :(得分:0)

我想到的第一个想法是在数据库中为其他语言版本复制带有说明的节点。 假设您有一个节点“ image_descriptions”,其子节点为(img1_description,img2_description等)。 想象一下,您需要将描述翻译成西班牙语,并在应用程序配置中设置了西班牙语语言环境后使用它们。

  1. 在数据库中创建一个名称为“ image_descriptions_spanish”的节点
  2. 使用相同的子节点填充此节点,但现在使用西班牙语填写值说明
  3. 从“ image_descriptions”中提取字符串资源,创建新的语言环境并将“ image_descriptions”的西班牙语翻译设置为“ image_descriptions_spanish”

因此,将数据库引用实例化到image_descriptions节点的行将如下所示:

DatabaseReference descriptionsRef = FirebaseDatabase.getInstance().getReference(getString(R.string.image_description)

相关语言将根据所选的语言环境自动显示。