Translate() (I think) method isn't working as intended

I tried to make a movement script for the player, but it’s often moving in the wrong direction: sometimes when I press W it sends the character forward and left, sometimes not. I think it’s coming from the translate method used. I’m new and this was made with the help of a tutorial so nothing I’m using is fairly basic:

using System.Collections;
using System.Collections.Generic;
using UnityEditor.Experimental.GraphView;
using UnityEngine;

public class PlayerController : MonoBehaviour
    public float speed;
    public float jumpHeight;
    public float groundDrag;
    private float rotationX, rotationY;
    public float sensitivity;
    private float horizontalInput, verticalInput;
    private float mouseX, mouseY;
    public Transform orientation;
    private Rigidbody Rigidbody;
    public LayerMask Ground;
    private bool onGround;
    void Start()
        Cursor.lockState = CursorLockMode.Locked;
        Cursor.visible = false;
        Rigidbody = GetComponent<Rigidbody>();

    void Update()
        // Movement
        horizontalInput = Input.GetAxis("Horizontal");
        verticalInput = Input.GetAxis("Vertical");
                // Horizontal is A & D; Vertical is W & S.
        transform.Translate(orientation.right * horizontalInput * Time.deltaTime * speed);
        transform.Translate(orientation.forward * verticalInput * Time.deltaTime * speed);
        // Jumping & Drag
        onGround = Physics.Raycast(transform.position, Vector3.down, 0.6f, Ground);
        if (onGround)
            Rigidbody.drag = groundDrag;
            Rigidbody.drag = 0;
        if (Input.GetKey(KeyCode.Space) && onGround)
            Rigidbody.AddForce(Vector3.up * jumpHeight, ForceMode.Impulse);
        // Camera & Orientation
        mouseX = Input.GetAxisRaw("Mouse X") * Time.deltaTime * sensitivity;
        mouseY = Input.GetAxisRaw("Mouse Y") * Time.deltaTime * sensitivity;
        rotationX -= mouseY;
        rotationY += mouseX;
        Mathf.Clamp(rotationX, -90, 90);
        transform.rotation = Quaternion.Euler(rotationX, rotationY, 0);
        orientation.rotation = Quaternion.Euler(0, rotationY, 0);

The rotation of orientation seems to be working when I check, so I don’t think that’s the issue. The camera controls are fine too, so I don’t know what’s wrong.
Also first post : D

I’m not sure what the orientation is supposed to represent. But to translate the player, you need to use Space.World, not Space.Self.

transform.Translate (orientation.right * horizontalInput * Time.deltaTime * speed, Space.World);
transform.Translate (orientation.forward * verticalInput * Time.deltaTime * speed, Space.World);

orientation.right and orientation.forward gives you the values in world-space, so you need to translate in world-space. If you don’t specify the space, then Space.Self is used.